Linux

cron 作業偶爾不執行

  • May 10, 2019

我有一個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)

看看OTHERJOBalways run while onApr 1 pg_backup.sh甚至沒有被執行。

我已經嘗試重新啟動crond,但這種情況一直在發生。這會影響具有相同版本的作業系統、核心和cronRPM 的多台伺服器。

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>

它給出了同樣的錯誤,去看看。

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