Linux Crontab定時(shí)執(zhí)行腳本出錯(cuò),但手動(dòng)執(zhí)行腳本正常原因及解決方案
實(shí)際開發(fā)場(chǎng)景
需要開發(fā)一個(gè)Flink監(jiān)控程序,初步使用shell腳本進(jìn)行監(jiān)控,如果發(fā)現(xiàn)失敗了,則自動(dòng)重新運(yùn)行Flink命令行參數(shù)進(jìn)行重啟。
遇到的問題
編寫好shell腳本后,在linux命令行調(diào)用 sh shell.sh進(jìn)行測(cè)試,成功實(shí)現(xiàn)監(jiān)控和重啟功能。于是利用crontab對(duì)腳本進(jìn)行定時(shí)調(diào)度監(jiān)控。
后來發(fā)現(xiàn),當(dāng)Flink失敗時(shí)確實(shí)發(fā)出了監(jiān)控報(bào)警,但是卻沒有自動(dòng)重啟。經(jīng)排查后發(fā)現(xiàn),應(yīng)該是腳本中Flink命令行啟動(dòng)Flink任務(wù)沒有成功,但是在Linux控制臺(tái)中測(cè)試又沒問題,這是什么原因呢?
查找資料之后發(fā)現(xiàn),crontab有一個(gè)壞毛病,就是它總是不會(huì)缺省的從用戶profile文件中讀取環(huán)境變量參數(shù),經(jīng)常導(dǎo)致在手工執(zhí)行某個(gè) 腳本時(shí)是成功的,但是到crontab中試圖讓它定期執(zhí)行時(shí)就是會(huì)出錯(cuò)。
錯(cuò)誤原因
所以原因就在于,crontab沒有去讀環(huán)境變量,需要再腳本中手動(dòng)引入環(huán)境變量
恍然大悟,于是嘗試在腳本中加入了引入環(huán)境變量的配置:
#!bin/bash
source /etc/profile
source ~/.bash_profile
...
再執(zhí)行時(shí),問題解決。文章來源:http://www.zghlxwxcb.cn/news/detail-613365.html
原來就是因?yàn)閏rontab在執(zhí)行腳本時(shí)沒有讀取環(huán)境變量,導(dǎo)致執(zhí)行Flink命令行出錯(cuò)文章來源地址http://www.zghlxwxcb.cn/news/detail-613365.html
到了這里,關(guān)于Linux Crontab定時(shí)執(zhí)行腳本出錯(cuò),但手動(dòng)執(zhí)行腳本正常原因及解決方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!