Cron
下一次執行的剩餘時間
我需要在我的 Cron 計劃中計算下一次執行特定作業的剩餘時間,我有一個 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
我如何知道從目前系統時間到下一次執行的總時間?秒數的計算僅與作業時間有關。
cron
不知道什麼時候工作會被解僱。它所做的就是每一分鐘,檢查所有crontab
條目並觸發匹配的條目"$(date '+%M %H %d %m %w')"
。您可以做的是從現在到 49 小時後的每一分鐘生成所有這些時間戳(考慮 DST 更改),手動進行匹配(棘手的部分)並報告第一個匹配的。
或者你可以使用croniter
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
如果時間倒退,它本身會通過避免執行兩次作業來處理這一點,或者如果時間前進,則在班次後執行跳過的作業。