Linux

crontab 時序混亂

  • January 30, 2019

有人可以解釋一下為什麼我假設的每週 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,所以它們在午夜過後的指定分鐘數執行。

引用自:https://serverfault.com/questions/951310