명령을 한 번 실행해야 하지만 성공할 때까지 하루에 한 번만 실행해야 합니다.
지속적인 가동 시간을 기대할 수 없으며 프로그램 성공도 보장할 수 없습니다.
프로그램을 사용하려면 네트워크 액세스가 필요하지만 컴퓨터를 시작할 때마다 네트워크에 액세스할 수 없습니다.
내 프로그램은 성공(0을 반환)하지 않는 한 -1 등으로 종료됩니다.
답변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 )
Unix가 조건부 검사를 평가하는 방식 때문에 조건의 왼쪽이 로 ||
평가되면 true
전체 표현식이 true이고 오른쪽은 절대 평가되지 않습니다. 즉, 프로그램이 호출되지 않습니다.
그런 다음 괄호 안의 &&는 양쪽이 모두 true로 평가되어야 하므로 /path/to/program
0이 아닌 반환 코드로 종료하는 경우 오른쪽에 있는 명령문을 평가하는 것은 의미가 없습니다. 표현식은 이미 false로 평가되었으며 /path/to/tempfile
결코 생성되지 않았습니다.