
コマンドは一度実行する必要がありますが、成功するまで1日1回だけ実行する必要があります。
継続的な稼働時間を期待できず、プログラムの成功も保証できません。
プログラムを使用するにはネットワークアクセスが必要ですが、コンピュータを起動するたびにネットワークにアクセスすることはできません。
私のプログラムは成功(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
ゼロ以外の戻りコードで終了する場合は、右側のステートメントを評価することは意味がありません。式はすでにfalseと評価されており、/path/to/tempfile
決して生成されませんでした。