linux普通用戶設置定時任務crontab失敗的排查過程


總結:

處理問題之后,先把經驗總結一下,步驟可分為以下幾步:

1、檢查定時任務crontab服務是否已正常啟動,service crond status

2、檢查定時任務的命令是否有錯,如果執行了腳本,也需要檢查腳本是否有錯,特別是輸入輸出文件時注意文件的絕對路徑、腳本的執行權限,最好先手工執行以下腳本,確保腳本可正常執行。

3、檢查crond服務正常啟動,又看不出來自己的定時任務命令跟腳本命令有什么問題,那就只能一步步看日志去排查問題了。

為了節省篇幅,下文隱去了1、2兩個步驟的操作。

處理過程:

安裝了一個postgres數據庫,為了備份數據庫,就寫了個備份腳本,在執行crontab -e添加定時任務,結果發現/var/log/cron日志中有相關記錄,但是無報錯信息。

 

但是執行並沒有成功。

一般情況下,當定時任務執行失敗時,如果沒有屏蔽錯誤時,系統會發送一個系統郵件到/var/spool/mail/root,但是仔細一開下面那條日志,發現發送日志失敗了:

 

所以日志並沒有生成,此時去需要去查看郵件日志/var/log/maillog,

 

百度一下找到解決方案:

vi  /etc/postfix/main.cf

修改inet_interfaces參數值為all

 

此時需要注意上面的提示,修改參數之后需重啟postfix服務,

service postfix restart

處理完發送系統郵件的問題之后,就可以去查看定時任務失敗的郵件了,為了快速產生郵件,可以設置定時任務一分鍾執行一次,等問題解決之后在調整為正常周期。

vi /var/spool/mail/root

 

此時發現了是postgres命令找不到,查看定時任務找到哪里使用了這條命令,如果定時命令中執行了腳本,那么也需要檢查腳本內容:

crontab -e

 

發現了是自己填寫的定時任務有問題,root通過直接編輯/etc/crontab文件的方式來添加定時任務時,可以指定執行用戶,但是如果使用了crontab -e來添加的任務,是沒有指定執行用戶這個參數的,因此我這樣寫的定時任務,會把postgres認為是一個命令,然后報錯命令不存在,無法執行,此時只需要把postgres去掉即可

 

然后查看日志/var/log/cron就可以看到定時任務正常執行,不再產生郵件

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM