在crontab 設定計畫任務,每天凌晨3點執行指令碼
conrtab(3點)tomcat使用者--執行指令碼(推送備檔案-->目標伺服器||同時將過程寫入log記錄)
然而在第二天例常檢查後,發現計畫任務沒有達到預期效果
/var/log/cron如下:
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
主機名我進行了加工,其他基本保持不變通過日誌可以看出在凌晨3點的時候計畫任務確實忠實的開始了,但是僅僅1秒鐘就結束了任務,這顯然是不正常的,因為是推送檔案,按照經驗判斷,至少需要一段時間。
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分鐘左右。
實際上指令碼編寫完成後,我就在互動式終端中執行了一下,是正常執行的。 另外又檢查了一下指令碼,這個指令碼是在我原來的指令碼基礎上改的,只是修改了一些變數,邏輯本身沒有什麼太大問題。
還記得我開頭說的嗎?指令碼進行推送檔案,同時將過程寫入日誌。問題就出在這裡
原來,我修改指令碼後,為了當時驗證效果,將原日誌檔案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
問題解決,打完收工 記一次除錯
這是我最近幾個月來遇到的最棘手的乙個問題 昨天花了4個小時找出第一層次的原因 這個糾結啊,本來和老婆說好準時下班回家吃飯的,結果被這個問題拖了老久。這是乙個gradle的plugin,用來resolve公司內部的dependency的,弄完了跑測試專案的,拋乙個npe,而且npe還不在自己的 裡面。...
記一次 EqualsAndHashCode的疑惑
lombok的使用真的是讓開發人員欲罷不能,乙個 data不管有多少屬性全部搞定,以後加字段也不用從新生成get和set方法。不過這裡還是有乙個小坑需要注意一下,舉個例子 public class equalsandhashcodetest data noargsconstructor access...
記一次除錯
這是我最近幾個月來遇到的最棘手的乙個問題 昨天花了4個小時找出第一層次的原因 這個糾結啊,本來和老婆說好準時下班回家吃飯的,結果被這個問題拖了老久。這是乙個gradle的plugin,用來resolve公司內部的dependency的,弄完了跑測試專案的,拋乙個npe,而且npe還不在自己的 裡面。...