次回の実行までの残り時間

次回の実行までの残り時間

Cron スケジュールでは、特定のジョブの次の実行に残り時間を計算する必要があります。ジョブの頻度が時間ごと、1日3回などのCronがありますが、特定の日付/日付でジョブが実行されません。 HH:MM:SSの場合、/var/spool/cron/RHELにも確認するアクセス権がありません。ジョブがで始まる場合9:30

30 9* * * /some/job.sh
-bash-3.2$ 日付+"%H:%M"
13:52

出力が必要です。19 Hours and 38 Minutes現在のシステム時間から次の実行が発生するまでの合計時間をどのように知ることができますか?秒の計算は、作業時間のみを意味します。

ベストアンサー1

cronいつ解雇されるかわからない職場。それがすることは、crontab毎分すべての項目を確認し、一致する項目を実行することだけです"$(date '+%M %H %d %m %w')"

あなたができることは、今から49時間の間にすべてのタイムスタンプを作成し(DSTの変更を考慮して)手動で一致を実行し(トリッキーな部分)、最初に一致するタイムスタンプを報告することです。

またはあなたは使用することができますクロニット python基準寸法:

python -c '
from croniter import croniter
from datetime import datetime
iter = croniter("3 9 * * *", datetime.now())
print(iter.get_next(datetime))'

遅延の場合:

$ faketime 13:52:00 python -c '
from croniter import croniter
from datetime import datetime
d = datetime.now()
iter = croniter("30 9 * * *", d)
print iter.get_next(datetime) - d'
19:37:59.413956

ただし、DSTの変更による潜在的なリスクに注意してください。

$ faketime '2015-03-28 01:01:00' python -c '
from croniter import croniter
from datetime import datetime
iter = croniter("1 1 * * *", datetime.now())
print iter.get_next(datetime)'
2015-03-29 02:01:00

$ FAKETIME_FMT=%s faketime -f 1445734799 date
Sun 25 Oct 01:59:59 BST 2015
$ FAKETIME_FMT=%s faketime -f 1445734799  python -c '
from croniter import croniter
from datetime import datetime
iter = croniter("1 1 * * *", datetime.now())
print iter.get_next(datetime)'
2015-10-25 01:01:00

$ FAKETIME_FMT=%s faketime -f 1445734799 python -c '
from croniter import croniter
from datetime import datetime
d = datetime.now()
iter = croniter("1 1 * * *", d)
print iter.get_next(datetime) - d'
-1 day, 23:01:01

cron時間が経つにつれてタスクが 2 回実行されるのを防ぐか、時間が進むと交互にスキップされたタスクが実行されないようにすることで、この問題を自己解決できます。

おすすめ記事