crontab定時執行shell腳本失敗的原因


有一段時間不用crontab定時執行任務了,這次趁着項目實施的機會來進一步分析一下crontab定時任務設置時遇到的一些棘手的問題。

crontab -l 查看目前已經設置的crontab信息

crontab -e 編輯定時任務

舉例說明

*/1 * * * *  jstack 進程號 >> jstack.log

前五個“*”號分別代表“分鍾(0-59) 小時(0-23) 天(1-31) 月(1-12) 星期(0-6, 0表示星期日)

上面例子中表示的每隔一分鍾就執行一次jstack並將運行結果輸出到jstack.log中。

有小伙伴可能會說,這樣執行可能會不成功哦,那么問題來了,為什么會不成功?

如果當前你用的是root用戶,而且環境變量中如果配置好了java環境變量,那么執行上面的crontab是沒問題的,但是如果你用的其他新建的用戶,雖然你可能也配置了java環境變量

但是crontab不會讀取你其他用戶環境變量中的內容,所以解決方案是把執行命令保存成一個shell腳本,在腳本中顯示執行當前用戶的環境變量,再運行命令輸出

1 #!/bin/bash
2 . /etc/profile
3 . ~/.bash_profile
4 echo 獲取java進程號
5 pid=`ps -ef|grep java|awk '{print $2}'`
6 echo ${pid}
7 echo 開始記錄jstack信息,並輸出到根目錄的jstack.log
8 jstack ${pid} >> jstack.log

假設上面這段代碼保存到jstack.sh文件,這樣再設置crontab的時候直接

*/1 * * * *   /home/test/jstack.sh 

這樣就可以啦,觀察jstack.log文件的增長情況,這樣就避免了使用絕對路徑的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM