Linux

使用 crontab 和 /etc/cron.hourly,daily,weekly 的區別

  • April 11, 2015

我有一個預定的腳本,它每小時對我們的 Subversion 儲存庫進行 svnsync 備份。我從根 crontab 中的一個條目執行它沒有問題,但決定我想從 /etc/cron.hourly 執行它而不是為了增加可見性(並且因為我們的一位工程師不小心刪除了 crontab,因為他認為“crontab -r”的意思是“閱讀 crontab ;-))

cron.hourly 腳本中的 svnsync 命令都失敗,並顯示一條消息,指出需要接受 SVN 儲存庫的 SSL 證書(這是使用者第一次訪問 SVN 儲存庫時以互動方式獲得的消息,但是一旦證書我接受該消息不再出現)。

因此,在我看來,從 cron.hourly 執行腳本時,該腳本是在不同的使用者環境下執行的,而不是通過根 crontab 執行時。誰能解釋其中的區別?

更新:我應該提到我的發行版,我在 CentOS 5.1 上使用 anacron。

更新2:感謝到目前為止的建議;我認為這更像是一個顛覆問題。我總是嘗試將我的環境封裝到我的腳本中,但這裡的問題是我不確定當我從cron.hourly。我猜這與 run-parts 腳本的執行方式有關。

您想使用“–config-dir”選項讓它知道在哪裡可以找到接受的證書(例如 ~/.subversion 預設情況下)。

也就是說,我幾乎可以肯定你最好從 hooks/post-commit 腳本中呼叫 svnsync,正如其他地方所建議的那樣。然後你的鏡像總是同步的,而不是與你的主人在一小時前的位置同步。

在 Debian/Ubuntu 系統上,cron.daily|weekly|montly 是從主 crontab 啟動的。

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 )

另請記住,您可能可以在 /etc/cron.d/ 中放置一個 crontab 片段

如您所見,這種環境並沒有什麼特別之處。至少在 Debian/Ubuntu 上,它都是以 root 帳戶執行的。

當我在腳本的最開始編寫 cron 腳本時,我總是設置我的 PATH 和我將使用的其他環境變數,所以我可以確定它在任何環境中都能正常工作。

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