有一段時間不用crontab定時執行任務了,此次趁着項目實施的機會來進一步分析一下crontab定時任務設置時遇到的一些棘手的問題。java
crontab -l 查看目前已經設置的crontab信息shell
crontab -e 編輯定時任務bash
舉例說明spa
*/1 * * * * jstack 進程號 >> jstack.logcode
前五個「*」號分別表明「分鐘(0-59) 小時(0-23) 天(1-31) 月(1-12) 星期(0-6, 0表示星期日)blog
上面例子中表示的每隔一分鐘就執行一次jstack並將運行結果輸出到jstack.log中。進程
有小夥伴可能會說,這樣執行可能會不成功哦,那麼問題來了,爲何會不成功?crontab
若是當前你用的是root用戶,並且環境變量中若是配置好了java環境變量,那麼執行上面的crontab是沒問題的,可是若是你用的其餘新建的用戶,雖然你可能也配置了java環境變量class
可是crontab不會讀取你其餘用戶環境變量中的內容,因此解決方案是把執行命令保存成一個shell腳本,在腳本中顯示執行當前用戶的環境變量,再運行命令輸出test
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文件的增加狀況,這樣就避免了使用絕對路徑的問題。