25分ごとにCronJobを実行

25分ごとにCronJobを実行

25分ごとにタスクを実行するより簡単な方法があるかどうか疑問に思います。 cronjobで分パラメータを* / 25に指定すると、毎時間25分と50分でのみ実行されます。

答え1

crontabのコマンドはcrontabで実行されるため、/bin/sh算術拡張を使用して現在の分モジュールで25が0に等しいかどうかを計算できます。

*/5 * * * * [ $(( $(date +\%s) / 60 \% 25 )) -eq 0 ] && your_command

cronエントリ全体は5分ごとに実行されますが、現在の分(エポック以降の分数)モジュールで25が0に等しい場合にのみ実行されますyour_command

他の人が指摘したように、1日は25分に分かれていないので、your_command毎日同じ時間に実行されるわけではありませんが、〜する25分ごとに実行されます。

答え2

最良の方法は20〜30分間走ることです。

次善策は、おそらく5分ごとにトリガーしてから内部カウントまたはタイムスタンプを維持し、5回のトリガーごとに実行するか、最後の実行後25分が経過した場合に実行することです。

さらに複雑なのは、真夜中から始まり、一日の正確な時間を把握し、一日の終わりにエラーを受け入れることです。これには、crontabエントリを別の時間にコピーすることが含まれます。

これより複雑なのは、1ヶ月全体の時間を計算することです。

最後に、独自のAlways-Onデーモンを実装し、スケジューリングを実行することができます。

答え3

直接的な経験はありませんが、フルロン箱の外で欲しいものをやっているようです。それによると文書頻度を指定できます。

# Get our mails every 30 minutes 
@ 30 getmails -all 

# make some security tests every 48 hours of system up time, 
# force a mail to be sent to root even if there is no output 
@mailto(root),forcemail 2d /etc/security/msec/cron-sh/security.sh

答え4

ファイルが最後に変更された時間で再生できます。

  • /usr/local/bin/ageファイルの寿命を出力する小さなスクリプト(たとえば)を作成します。

    #bin/sh
    echo $(( $( date +%s ) - $( stat -c %Z $1 ) ))
    

あなたのcrontabは次のとおりです(私が正しい場合、25分が1500秒であると仮定)

* * * * *  [ $(/usr/local/bin/fileage /var/tmp/your_command.offset) -gt 1500  ] && touch /var/tmp/your_command.offset && your_command

私が/var/tmp代わり/tmpに使用していることに注意してください。FHSシステムのシャットダウン/起動時に削除しないでください。

関連情報