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
추가로 해당 파일이 디렉터리, 명명된 파이프 또는 다른 유형의 파일이 아닌 일반 파일인지 확인하려면 -f
test 대신 test를 사용할 수 있습니다.-e
/tmp/signal.txt
크론 일정을 깨끗하게 유지하려면 테스트를 스크립트 자체로 옮기는 것이 좋습니다. 그러면 다음과 같은 일정을 가질 수 있습니다.
* * * * * /opt/myscript.sh
...그리고 스크립트의 시작 부분에 테스트가 포함되고 테스트가 실패하면 종료됩니다.
if [ ! -e /tmp/signal.txt ]; then
exit
fi
답변2
완전히 적응하려면 서비스 섹션 에서 사용할 수 있습니다 systemd
.cron
ConditionPathExists=/path/to/file
[Unit]
ConditionIsFile
유사한 직접 테스트가 없기 때문에 경로가 파일인지 확인하는 것은 좀 더 복잡할 수 있습니다 .
옵션 1파일이 결코 비어 있지 않다는 것을 알고 있으므로 다음을 사용할 수 있습니다.ConditionFileNotEmpty=/path/to/file
옵션 2파일 크기도 0일 수 있고 파일이 존재하는지 확인해야 하며 파일인 경우 경로가 존재하고 파일인지 테스트할 수 있습니다.아니요디렉토리:
ConditionPathExists=/path/to/file
ConditionPathIsDirectory=!/path/top/file
=!
논리는 어디에 있습니까?아니요운영자.