這幾天在設定一部新的伺服器。 建立一個檔案 /etc/cron.daily/backup.sh 把一些備份的指令寫在裡面。 兩三天下來卻一直沒等到備份檔的出現。
查看 cron 的 log 檔: journalctl _COMM=cron
看到這樣的內容:
Jul 13 05:17:01 ckhung CRON[2075]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0) Jul 13 05:17:01 ckhung CRON[2076]: (root) CMD (cd / && run-parts --report /etc/cron.hourly) Jul 13 05:17:01 ckhung CRON[2075]: pam_unix(cron:session): session closed for user root Jul 13 06:17:01 ckhung CRON[2079]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0) Jul 13 06:17:01 ckhung CRON[2080]: (root) CMD (cd / && run-parts --report /etc/cron.hourly) Jul 13 06:17:01 ckhung CRON[2079]: pam_unix(cron:session): session closed for user root Jul 13 06:25:01 ckhung CRON[2084]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0) Jul 13 06:25:01 ckhung CRON[2085]: (root) CMD (test -x /usr/sbin/anacron || { cd / && run-parts --report /etc/cron.daily; }) Jul 13 06:25:01 ckhung CRON[2084]: pam_unix(cron:session): session closed for user root Jul 13 07:17:01 ckhung CRON[2139]: pam_unix(cron:session): session opened for user root(uid=0) by (uid=0) Jul 13 07:17:01 ckhung CRON[2140]: (root) CMD (cd / && run-parts --report /etc/cron.hourly) Jul 13 07:17:01 ckhung CRON[2139]: pam_unix(cron:session): session closed for user root
為什麼系統執行 cron.hourly 的指令跟執行
cron.daily 的指令不一樣啊?
原來
anacron 的目的是用來補原始 cron 的不足:
如果你的電腦不是 24 小時開機 (不是伺服器),
那麼 ancron 可以確保每次開機時都把先前遺漏的工作補足,
不過它會忽略 cron.hourly 的部分。
先確認一下我到底有沒有安裝 anacron:
dpkg -l | grep -i cron ; ls -l /usr/sbin/anacron
果然沒有。
那就來手動執行後半部試試看...
叫它多印一些訊息:
run-parts --verbose /etc/cron.daily
咦, 為什麼沒有執行我的 backup.sh? 權限都正確啊?
-rwxr-xr-x 1 root root 539 Jun 9 2022 apache2 -rwxr-xr-x 1 root root 1478 May 25 22:11 apt-compat -rwxr-xr-x 1 root root 285 Jul 16 09:49 backup.sh -rwxr-xr-x 1 root root 123 Mar 27 08:41 dpkg -rwxr-xr-x 1 root root 377 Dec 15 2022 logrotate -rwxr-xr-x 1 root root 1395 Mar 13 06:23 man-db只是檔名長得跟別人不一樣... 把檔名改成 backup, 結果竟然就可以執行了! 搜尋到 這個 bug report, 原來是因為 debian 會在某些 (不見得是 cron 的) 目錄留下 *.dpkg-* 這類的檔案, run-parts 指令想要避開, 所以不會執行檔名當中有句點的檔案。 run-parts 的手冊裡有寫喔! 靠 google 繞了一大圈才認真讀, 真是太習慣捨近求遠了啊!
沒有留言:
張貼留言
因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。