Cron

下一次執行的剩餘時間

  • May 19, 2020

我需要在我的 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如果時間倒退,它本身會通過避免執行兩次作業來處理這一點,或者如果時間前進,則在班次後執行跳過的作業。

引用自:https://unix.stackexchange.com/questions/181347