
コマンドを 1 回実行する必要がありますが、成功するまで 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
作成されません。