在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
問題解決,打完收工