如何每天只運行一次程序,同時考慮到可變的正常運行時間和可能的程序故障?

如何每天只運行一次程序,同時考慮到可變的正常運行時間和可能的程序故障?

我需要運行命令一次,但每天只需運行一次,直到成功為止。

無法期望持續的正常運作時間,也無法保證計畫成功。

該程式需要網路訪問,但並非每次我啟動電腦時都具有網路存取權限。

我的程式將以 -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永遠不會被創建。

相關內容