
명령을 한 번 실행해야 하지만 성공할 때까지 하루에 한 번만 실행해야 합니다.
지속적인 가동 시간을 기대할 수 없으며 프로그램 성공도 보장할 수 없습니다.
이 프로그램에는 네트워크 액세스가 필요하지만 네트워크 액세스로 컴퓨터를 시작할 때마다 그렇지는 않습니다.
내 프로그램은 성공하지 않는 한 -1과 같이 종료됩니다(0을 반환함).
답변1
이를 제공하려면 쉘을 사용하십시오. 예를 들어, 다음과 같은 스크립트를 작성하십시오.
#!/bin/sh
# Check to see if this is already running from some other day
mkdir /tmp/lock || exit 1
while ! command-to-execute-until-succeed; do
# Wait 30 seconds between successive runs of the command
sleep 30
done
rmdir /tmp/lock
그런 다음 cron으로 스크립트를 지정하십시오.
답변2
내 생각에 가장 쉬운 방법은 프로그램이 시도하기 전에 파일의 존재를 확인하고 성공적으로 실행되면 해당 파일을 생성하는 것입니다.
그렇게 하도록 프로그램을 수정할 수 없는 경우 cronjob 자체를 사용하십시오. 다음과 같은 내용이 있습니다.
test -e /path/to/tempfile || ( /path/to/program && touch -a /path/to/tempfile )
유닉스가 조건 검사를 평가하는 방식 때문에 조건의 왼쪽이 로 ||
평가되면 true
전체 표현식이 true이고 오른쪽은 평가되지 않습니다. 즉, 프로그램이 호출되지 않습니다.
그런 다음 괄호 내에서 &&는 양쪽이 모두 true로 평가되어야 하므로 /path/to/program
0이 아닌 반환 코드로 종료하는 경우 오른쪽의 명령문을 평가할 필요가 없습니다. 표현식은 이미 false로 평가되어 /path/to/tempfile
생성되지 않습니다.