Cron Jobは14日ごと(または隔週火曜日)に実行されます。

Cron Jobは14日ごと(または隔週火曜日)に実行されます。

隔週火曜日の午前5時15分にコマンドを実行したいと思います。これを行う方法はありますか?

ベストアンサー1

火曜日05:15にジョブを実行するクローンスケジュールは次のとおりです。

15 5 * * 2

または、日付名を使用してください(どこでサポートされていない可能性があります)。

15 5 * * tue

スケジュールが実行されたときに毎秒コマンドを実行する最も簡単な方法は、クローンジョブの状態を一時ファイルに保つことです。ファイルが存在する場合は削除されますが、操作は他の操作を実行しません。ファイルが存在しない場合、コマンドが実行され、ジョブがファイルを生成します。

したがって、スケジュールは次のようになります。

15 5 * * 2 if [ -e /tmp/statefile ]; then rm -f /tmp/statefile; else cmd; touch /tmp/statefile; fi

明らかに(?)cronスケジュールによってトリガされるシェルスクリプトにビジネスロジックがカプセル化されている場合、これはより明確になります。

15 5 * * 2 /some/path/cron-wrapper

シェルcron-wrapperスクリプトは次のとおりです。

#!/bin/sh

statefile=/tmp/statefile

if [ -e "$statefile" ]; then
    rm -f "$statefile"
    exit
fi

cmd # the command we want to run

touch "$statefile"

これは、コマンドの終了状態(cmd上記の例では)を維持しないことに注意してください。たとえば、cronに実行失敗を通知するには、これを行う必要がある場合は、ラッパースクリプトがコマンドの終了状態で終了することを確認してください。

#!/bin/sh

statefile=/tmp/statefile

if [ -e "$statefile" ]; then
    rm -f "$statefile"
    exit
fi

cmd # the command we want to run
err=$?

touch "$statefile"

exit "$err"

ここで使用する正確なロジックは要件によって異なります。たとえば、コマンドが失敗したときにステータスファイルが生成されないようにしますか?メンテナンススクリプトによって消去される可能性が低く、異なるデータを上書きしたり、同じコンピュータで実行されている他のプロジェクトによって上書きされたりする可能性が低い安全な場所にステータスファイルを生成することもできます。

これその他これを行う方法は、同様の質問に対する現在受け入れられている回答で説明されているように、ある種の日付計算形式を使用することです。隔週でcronでスクリプトを実行する

おすすめ記事