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

2021-09-21 21:15:43 字數 1899 閱讀 8589

在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還不在自己的 裡面。...