
我需要運行命令一次,但每天只需運行一次,直到成功為止。
無法期望持續的正常運作時間,也無法保證計畫成功。
該程式需要網路訪問,但並非每次我啟動電腦時都具有網路存取權限。
我的程式將以 -1 等退出,除非成功(返回 0 )。
答案1
使用 shell 來提供此功能。例如,建立一個類似以下內容的腳本:
#!/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
以非零返回代碼退出,則計算右側的語句是沒有意義的——表達式已經計算為 false——並且/path/to/tempfile
永遠不會被創建。