記一次LINUX-CRONTAB失敗的排查案例

在LINUX中,使用crontab來作計劃任務是一件很常見的事。本文記錄一次排查過程tomcat

故障描述

在crontab 設置計劃任務,天天凌晨3點執行腳本服務器

conrtab(3點)tomcat用戶--執行腳本(推送備文件-->目標服務器||同時將過程寫入LOG記錄)ide

然而在次日例常檢查後,發現計劃任務沒有達到預期效果日誌

排查步驟

首先檢查計劃任務是否執行

/var/log/cron以下:code

Jan 30 03:00:01 z00w00-host CROND[2375]: (tomcat) CMD (/usr/bin/run-parts /usr/share/tomcat/tomcat_backup)
Jan 30 03:00:01 z00w00-host run-parts(/usr/share/tomcat/tomcat_backup)[2375]: starting autosyrc.sh
Jan 30 03:00:01 z00w00-host run-parts(/usr/share/tomcat/tomcat_backup)[2395]: finished autosyrc.sh

主機名我進行了加工,其餘基本保持不變crontab

經過日誌能夠看出在凌晨3點的時候計劃任務確實忠實的開始了,可是僅僅1秒鐘就結束了任務,這顯然是不正常的,由於是推送文件,按照經驗判斷,至少須要一段時間。it

Feb  1 03:00:01 z00w00-host CROND[20514]: (tomcat) CMD (/usr/bin/run-parts /usr/share/tomcat/tomcat_backup)
Feb  1 03:00:01 z00w00-host run-parts(/usr/share/tomcat/tomcat_backup)[20514]: starting autosyrc.sh
Feb  1 03:04:02 z00w00-host run-parts(/usr/share/tomcat/tomcat_backup)[20615]: finished autosyrc.sh

以上是我解決問題後在今天抓取的日誌,能夠看到正常腳本執行推送文件應該是在4分鐘左右。class

是腳本邏輯問題嗎?

實際上腳本編寫完成後,我就在交互式終端中執行了一下,是正常運行的。 另外又檢查了一下腳本,這個腳本是在我原來的腳本基礎上改的,只是修改了一些變量,邏輯自己沒有什麼太大問題。基礎

是執行權限的問題

還記得我開頭說的嗎?腳本進行推送文件,同時將過程寫入日誌。問題就出在這裏變量

原來,我修改腳本後,爲了當時驗證效果,將原日誌文件rsync.log 進行了重命名 在人工執行的時候rsync.log 被重建了。因爲我是root用戶執行,因此rsync.log的屬主變成了root,而計劃任務中,個人執行用戶是tomcat。因爲文件屬主發生變化,tomcat沒法寫入root屬主的rsync.log,致使腳本在計劃任務中秒執行但實際上沒有按預期來達到目標。
排查中也發現日誌文件時間沒有任何變化。

解決的辦法

分析後查看文件屬主,果真如此。修改屬主後,修改計劃任務,驗證執行,故障解除。

修改前的屬主

-rwxr-xr-x 1 tomcat tomcat 1.5K Jan 29 14:55 autosyrc.sh
-rw-r--r-- 1 root root 164K Jan  31 14:55 rsync.log

修改後的屬主

-rwxr-xr-x 1 tomcat tomcat 1.5K Jan 29 14:55 autosyrc.sh
-rw-r--r-- 1 tomcat tomcat 164K Feb  1 03:04 rsync.log

問題解決,打完收工

相關文章
相關標籤/搜索