Ubuntu

cron.daily 不應該執行的時候呢?

  • August 23, 2014

我的/etc/cron.daily腳本似乎執行得比我理解的要晚得多。我在 Ubuntu 中並安裝了 anacron。

如果我這樣做,sudo cat /var/log/syslog | grep cron我會得到類似的東西:

Aug 23 01:17:01 mymachine CRON[25171]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Aug 23 02:17:01 mymachine CRON[25588]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Aug 23 03:17:01 mymachine CRON[26026]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Aug 23 03:25:01 mymachine CRON[30320]: (root) CMD (test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ))
Aug 23 04:17:01 mymachine CRON[26363]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Aug 23 05:17:01 mymachine CRON[26770]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Aug 23 06:17:01 mymachine CRON[27168]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Aug 23 07:17:01 mymachine CRON[27547]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)
Aug 23 07:30:01 mymachine CRON[2249]: (root) CMD (start -q anacron || :)
Aug 23 07:30:02 mymachine anacron[2252]: Anacron 2.3 started on 2014-08-23
Aug 23 07:30:02 mymachine anacron[2252]: Will run job `cron.daily' in 5 min.
Aug 23 07:30:02 mymachine anacron[2252]: Jobs will be executed sequentially
Aug 23 07:35:02 mymachine anacron[2252]: Job `cron.daily' started

如您所見,在 3:25 它試圖做一些事情。但cron.daily執行實際上是在 7 點 35 分開始的。

/etc/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 3    * * *   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 )
#

據我了解,每日腳本確實是3:25。

/etc/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

那麼……有人知道為什麼我的 cron 在 3:25 開始做某事,然後真正在 7:35 開始工作嗎?

另外..正如您在日誌中看到的,每小時的作業正在正確的時間執行:小時和 17 分鐘,這正是我所擁有的/etc/crontab

最後,從日誌來看,我的日常工作似乎實際上是由anacron而不是cron?所以cron找不到要執行的東西(在 3:25)然後anacron在 7:35 執行作業?如果是真的,我該如何解決這個問題?

提前致謝,

test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )

這將執行test命令,然後僅( cd ...)在測試命令失敗時執行序列。如果安裝了 anacron,那麼 test 命令會成功,而命令行的其餘部分將不會執行。換句話說,這條線只有在cron.daily沒有安裝 anacron 的情況下才會執行。

同時,anacron 會定期被呼叫,並最終cron.daily基於自己的配置文件執行。看起來 anacron 可能不會在當天早些時候被呼叫,否則它會更早地執行 cron.daily。

如果您希望命令從 cron 而不是 anacron 執行,您可以編輯它們各自的配置,並可能將 anacron 設置為在當天早些時候執行。或者,如果您不想使用 anacron,則可以完全刪除它。

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