cron 作業偶爾不執行
我有一個
CentOS 6.6
安裝了以下軟體包的伺服器:crontabs-1.10-33.el6.noarch cronie-1.4.4-12.el6.x86_64 cronie-anacron-1.4.4-12.el6.x86_64 kernel-2.6.32-504.3.3.el6.x86_64
有時,計劃每天執行的備份作業之一根本不會執行。該腳本甚至沒有根據
/var/log/cron.log
. 有趣的是,計劃在同一時間執行的其他作業執行沒有任何問題。我無法重現該問題,也沒有發現任何模式。如果我什麼都不做,那麼第二天的工作會按預期正常執行。
crond 只是忽略應該在特定時間執行的多個作業中的一個。這只是偶爾發生。
我在其他幾個地方讀到人們談論在
crontab
文件末尾添加一個空行。偶爾無法執行的作業確實在我crontab
文件的最後一行。我找不到任何確認這是一個真實或已知的錯誤。# tail -2 /var/spool/cron/postgres * * * * * OTHERJOB 0 21 * * * /pg_backup.sh
這就是我的全部
/var/log/cron.log
Mar 31 21:00:02 SERVERNAME [cron.info] CROND[19394]: (root) CMD (OTHERJOB) Mar 31 21:00:02 SERVERNAME [cron.info] CROND[19418]: (postgres) CMD (/pg_backup.sh) Mar 31 21:01:02 SERVERNAME [cron.info] CROND[20062]: (root) CMD (OTHERJOB) Apr 1 21:00:02 SERVERNAME [cron.info] CROND[31349]: (root) CMD (OTHERJOB) Apr 1 21:01:01 SERVERNAME [cron.info] CROND[32080]: (root) CMD (OTHERJOB)
看看
OTHERJOB
always run while onApr 1
pg_backup.sh
甚至沒有被執行。我已經嘗試重新啟動
crond
,但這種情況一直在發生。這會影響具有相同版本的作業系統、核心和cron
RPM 的多台伺服器。
cronie
( )有一個更新版本1.4.12
,但是升級它不是一個選項,因為我們已經在使用最新的可用版本Centos 6.6
在我的 ( ) 之後,我瀏覽了所有
cronie
版本的變更日誌,1.4.4
但似乎對這個特定問題沒有任何修復。還檢查了所有送出消息。
最初的 cron 要求每個條目都以換行符結尾,所以是的,有時你確實需要一個空行或結尾的東西。
Although cron requires that each entry in a crontab end in a newline character, neither the crontab command nor the cron daemon will detect this error. Instead, the crontab will appear to load normally. However, the command will never run. The best choice is to ensure that your crontab has a blank line at the end. 4th Berkeley Distribution 29 December 1993 CRONTAB(1)
某些版本已修復或發出警告,例如 Ubuntu Maverik (10.10):crontab查看底部的診斷部分,其中指出將向 syslog 寫入警告。
DIAGNOSTICS cron requires that each entry in a crontab end in a newline character. If the last entry in a crontab is missing a newline (ie, terminated by EOF), cron will consider the crontab (at least partially) broken. A warning will be written to syslog.
這是搜尋文本出現的第一個答案,
cron error getpwname failed
所以我想我會發布我的問題的原因:我正在使用 /etc/crontab 但忘記將使用者放在命令前面。
IE,
*/5 * * * * /bin/bash <filename>
代替
*/5 * * * * root /bin/bash <filename>
它給出了同樣的錯誤,去看看。