crontab 時序混亂
有人可以解釋一下為什麼我假設的每週 cron 作業會在周日早上 06:47 執行,而實際上在周二早上 00:10 執行?
這是一個相當原始的 Debian Stretch 盒子(等待使用一段時間)。
我有以下 crontab:
# /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly ) #
以及以下 anacrontab:
# /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin HOME=/root LOGNAME=root # These replace cron's entries 1 5 cron.daily run-parts --report /etc/cron.daily 7 10 cron.weekly run-parts --report /etc/cron.weekly @monthly 15 cron.monthly run-parts --report /etc/cron.monthly
/usr/sbin/anacron 存在並且是可執行的。
日期:
Tue 29 Jan 15:26:23 UTC 2019
正常執行時間:
15:26:30 up 41 days, 7:03, 2 users, load average: 0.00, 0.00, 0.00
Syslog 顯示了在今天早上(星期二)00:10 執行的每週 cronjob:
Jan 29 00:10:10 RT-ARCHIVE anacron[48734]: Job `cron.weekly' started Jan 29 00:10:10 RT-ARCHIVE anacron[49100]: Updated timestamp for job `cron.weekly' to 2019-01-29
為什麼這次是星期二?如果系統是新啟動的,我可能會理解它通過 anacron 追趕,但事實並非如此。
此外,這項工作沒有在周日進行,只是為了說明這一點。
我過去使用 cron 沒有問題,我錯過了什麼???
編輯:
就像對到達這裡的任何人的說明一樣,我迄今為止只(故意)使用 cron,而不是 anacron。在這篇文章之後,我意識到我提供的較新的虛擬伺服器預設安裝了 anacron,而舊的則沒有。根據 Debian Wiki,anacron 是:
預設情況下由 Debian-Installer 在筆記型電腦上安裝,並與桌面任務一起安裝
所以也許我們的 IT 人員已經開始以不同的方式設置它們……
這三個條目
/etc/crontab
僅在/usr/sbin/anacrontab
不存在或不可執行時執行。請注意,它們以
test -x /usr/sbin/anacrontab
. 這首先執行,然後因為它們後面跟著||
,所以只有在前一個命令失敗時才會執行以下命令。正如
anacrontab
文件中的註釋還指出的那樣,它會覆蓋這三個條目。因此,您在 anacrontab 中的每週條目每 7 天執行一次,延遲 10 分鐘。因為您沒有指定 a
START_HOURS_RANGE
,所以它們在午夜過後的指定分鐘數執行。