cronjobでn日ごとにコマンドを実行したいのですが、当日から
たとえば、次を使用する場合:
16 23 */7 * * COMMAND
毎月0、7、14、21、28COMMAND
日の 23 時 16 分に実行されます。
たとえば、今日が 10 の場合、10、17、24 などを実行します
何か案は ?
*/7
毎月 0、7、14、21、28 日ではなく、1、8、15、22、29 日に実行されます (月の日数は 1 から始まります)。
10、17、24 日に実行したい場合は、次の月に、3 日からサイクルを戻したい場合は、次のように書くことができ10-31/7
ます3-31/7
。
(7 日ごとに実行することを意図したものには、weekly パラメータを使用する方が理にかなっていると思います。そうしないと、月末に異なる間隔で実行される可能性があるためです。)
編集:
質問を読み直すと、それcron
だけでは目的を達成するのに十分ではないようです。一般に、必要なパターン (n 日ごと) を表現する方法はありません。これは、常に月の特定の日からのものであり、月の最後の発生から最初の発生までの日数が n 日未満になる可能性があるためです。翌月。これに対する唯一の例外は、週次パターンの場合です。この場合、「月の日」フィールドの代わりに「曜日」フィールドを指定できます。
目的を達成するには、あらゆる方法で実行されている cron タスクを、参照日からどれだけ離れているかを確認する簡単なテストと組み合わせる必要がある場合があります。これは、Unix.SE のこのアイデアに似ています。(を使用する代わりに、おそらく bash 算術を直接使用できますbc
。)
crontab に複数の行を含めないのはなぜですか?
つまり、n 番目、n 番目 +x、n 番目 +2x などです。
コピー&ペーストはあなたの味方です。
おそらく、at(1) は、「今 + 3 日」のような構文を既にサポートしており、今から 3 日後を意味するため、より良い選択になるでしょう。
または、スクリプト内のロジックをエンコードして、「日付」の出力を解析します。たとえば、date +%d を呼び出して月の日付を確認し、その上で必要な演算を行います。
ただし、UNIX の一般的なルール: コピー アンド ペーストを何度も行う必要がある場合は、間違っています :)