20日ごとにタスクを実行するより簡単な方法があるかどうか疑問に思います。 cronジョブでdayパラメータを指定すると、*/20
毎月20日にのみ実行されます。 IEはデフォルトで月に一度実行されます。
秘訣は次のとおりです。25分ごとにCronJobを実行数分間動作しますが、毎日クローンジョブを実行して確認しないと、1日に適用されないかどうか心配です。
これが私の最後の手段になるでしょうが、これを行うより良い/より賢い方法があるかどうかを知りたいです。
追加情報
これは更新目的のため、20日以内に完了できます。しかし、私はほとんどの時間をスリープ状態に保つラップトップで作業しています。したがって、保証された実行は必須です(cronにはこれが不足していると読みました)。
答え1
20日ごとにスクリプトを実行する唯一の方法は、毎日実行してcron
スクリプトをチェックインすることです(年初以降の日数が要件を確認する場合)。次の操作が実行されます。
if [ $( expr $(date +%j) % 20) -ne 0 ]
then exit # days do not divide to 20 w/o remainder
fi
#your script here
答え2
これが私が問題を解決した方法です
cron
毎日スクリプトを呼び出す- スクリプトの上部付近のステータスファイルを確認して、20日以上前に最後に実行されたことを確認してください。
- それ以外の場合は終了
- 現在の日付/時刻を反映するようにスクリプトの末尾のステータスファイルを更新します。
スクリプトの起動時に日付/時刻をキャプチャしますが、スクリプトが正常に終了しようとしたときにのみ記録するなど、いくつかの機能強化があります。これは、長期実行プロセスでは特に重要ですが、実行に少し時間がかかるプロセスでは重要ではありません。
"$HOME/${0##*/}.lastran"
私は最後の実行の状態ファイル(たとえば、書き込み)を使用する傾向がありますが、date
内容ではなくファイルの変更日時に依存します。find "$stateFile" -mtime +19
ファイルが十分に古い場合、空でない値が返されます。