crontab為何自動中斷
在最近開發的一個系統中,有一個定時任務,每天需要將一份資料(大約200w條),傳送至一個線上key-value儲存系統中。
說到定時任務,最常見的,就是使用crontab。原來這一套系統已經開發完成,部署在深圳IDC,工作良好。最近,需要在天津IDC也部署一套。但是在天津部署之後,我卻發現,天津的這套系統每天只能定時傳送48999條資料(準確數字),然後就自動停止了。
我首先嚐試了crontab -l,並直接手動執行其輸出中的相關指令碼。這時可以發現,程式並沒有中斷,完整發送了所有資料。
這時我一度懷疑,是我在程式中設定了什麼閾值,才能導致每天都無比準確的傳送48999條資料就停止。但是複查一遍程式碼後並沒有查詢到什麼可疑的配置。
接下來我又在網上搜索crontab相關的問題,但是大都是寫一些無法啟動crontab相關指令碼的問題,對於我這種程式可以定時啟動,但是又“準確”的自動中斷的問題,卻沒什麼相關答案。
考慮到在深圳IDC沒有問題,但是在天津IDC卻出現了這個詭異的問題。兩個IDC使用的機器型號並不一致,於是我又從機器的角度重新查詢crontab相關的問題,終於找到的罪魁禍首:
原來,這是由於在部分機器上,crontab對於執行程式的輸出有大小限制,輸出超出一定的位元組之後就會自動停止程式。
而我的程式每傳送1000條資料即會輸出一條log,所以每次正好輸出49000這條log之後,就超出了大小限制,因此每次都會自動停止在48999條了。
解決方案:可以 重定向輸出至 >/dev/null,如:
1 8 * * * cd /path/to/your/bin/ && ./your_bin --flagfile=../conf/your.flags >/dev/null 2>&1 &
希望遇到類似問題的同學,可以儘快的搜尋到我這篇文章。(手動狗頭)
轉載請註明出處: http://blog.guoyb.com/2018/09/15/crontab-auto-kill/
歡迎使用微信掃描下方二維碼,關注我的微信公眾號TechTalking,技術·生活·思考:
