有一段時間不用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文件的增長情況,這樣就避免了使用絕對路徑的問題。