파일이 존재할 때만 crontab 작업을 실행하는 방법은 무엇입니까?

파일이 존재할 때만 crontab 작업을 실행하는 방법은 무엇입니까?

crontab oneliner에 파일이 있는지 확인하고 파일이 있는 경우에만 스크립트를 실행할 수 있습니까?

의사코드:

* * * * * <if /tmp/signal.txt exists> run /opt/myscript.sh

답변1

기술적으로 파일 존재 여부에 따라 cron 작업 실행을 피할 수는 없지만 파일 존재 여부를 작업 테스트한 다음 해당 테스트 결과에 따라 추가 조치를 취하도록 할 수 있습니다.

Normal을 사용하여 존재 여부를 테스트하고 테스트에 성공하면 스크립트를 실행합니다.

* * * * *       if [ -e /tmp/signal.txt ]; then /opt/myscript.sh; fi

또는

* * * * *       if test -e /tmp/signal.txt; then /opt/myscript.sh; fi

또는 단락 구문을 사용하십시오. 그렇게 하면 일이 생길 것이다.실패하다파일이 존재하지 않는 경우(이로 인해 cron 데몬에서 이메일이 전송될 수 있음):

* * * * *       [ -e /tmp/signal.txt ] && /opt/myscript.sh

또는

* * * * *       test -e /tmp/signal.txt && /opt/myscript.sh

추가로 해당 파일이 디렉터리, 명명된 파이프 또는 다른 유형의 파일이 아닌 일반 파일인지 확인하려면 -ftest 대신 test를 사용할 수 있습니다.-e/tmp/signal.txt

크론 일정을 깨끗하게 유지하려면 테스트를 스크립트 자체로 옮기는 것이 좋습니다. 그러면 다음과 같은 일정을 가질 수 있습니다.

* * * * *       /opt/myscript.sh

...그리고 스크립트의 시작 부분에 테스트가 포함되고 테스트가 실패하면 종료됩니다.

if [ ! -e /tmp/signal.txt ]; then
    exit
fi

답변2

완전히 적응하려면 서비스 섹션 에서 사용할 수 있습니다 systemd.cronConditionPathExists=/path/to/file[Unit]


ConditionIsFile유사한 직접 테스트가 없기 때문에 경로가 파일인지 확인하는 것은 좀 더 복잡할 수 있습니다 .

옵션 1파일이 결코 비어 있지 않다는 것을 알고 있으므로 다음을 사용할 수 있습니다.ConditionFileNotEmpty=/path/to/file

옵션 2파일 크기도 0일 수 있고 파일이 존재하는지 확인해야 하며 파일인 경우 경로가 존재하고 파일인지 테스트할 수 있습니다.아니요디렉토리:

ConditionPathExists=/path/to/file
ConditionPathIsDirectory=!/path/top/file

=!논리는 어디에 있습니까?아니요운영자.

관련 정보