最近項目上有個小需求,在Linux下定時重啟SpringBoot項目打好的Jar包,定時任務使用crontable。
crontable -e 添加定時任務,例如:*/3 * * * * /usr/lcoal/autoRestart.sh,每3分鍾執行autoRestart腳本。
shell腳本大致寫法:
1,獲取Jar包運行時所占用的進程。
2,kill掉進程。
3,加載環境變量。
4,后台重啟Jar包,指定日志輸出路徑。
話不多說,直接開始整~~
一.編寫可執行shell腳本
1,創建腳本文件autoRestart.sh
1 touch autoRestart.sh
2,將.sh文件變為可執行文件
chmod +x autoRestart.sh #文件變為可執行文件,可以看到文件名變色
3,使用vim進入腳本文件,注意:shell腳本中必須要有#!/bin/bash,否則shell腳本無法執行
1 #!/bin/bash 2 ID=`ps -ef | grep java | grep -v 'grep' | awk '{print $2}'` #注意查詢出bash本身的進程號 3 echo $ID 4 echo "--------------" 5 for id in $ID 6 do 7 kill -9 $id 8 echo "killed $id" 9 done 10 sleep 2 11 echo "restart begin" 12 source /etc/profile 13 nohup java -jar /usr/local/gateway.jar > /usr/local/nohup.out & 14 processID=`ps -ef | grep java | grep -v 'grep' | awk '{print $2}'` 15 echo "restart success $processID"
寫shell腳本后,可使用 sh autoRestart.sh 或 ./autoRestart.sh 來測試一下腳本文件是否可以執行成功。
上述腳本解釋:
1,查找java相關進程並取出進程號賦值給ID;
2,循環遍歷變量ID,kill相關進程;
3,加載環境變量;
4,后台執行nohup java -jar 命令啟動Jar包,並將日志輸出到指定的nohup.out;
5,查詢新啟動的java進程號;
二.配置定時任務
1,編輯定時任務文件
1 crontab -e
2,添加每3min執行一次(crontab定時任務中文件需使用絕對路徑)
1 */3 * * * * /usr/local/autoRestart.sh
3,查看已配置的定時任務列表
1 crontab -l
ps.(1).重新加載crond服務
1 /sbin/service crond reload
(2).查看定時任務執行日志
1 tail -f /var/log/cron
(3).判斷語句寫法格式需要注意一下:
if+空格+[+空格+表達式+空格+];then 如:
1 if [ $(ps -ef | grep java | grep -v 'grep' | wc -l) eq 25509 ];then
至此,Linux下使用shell腳本+定時任務crontab實現定時重啟Jar包大功告成。。。
cron表達式資料:https://www.cnblogs.com/tooker/p/14666595.html
vim中復制整行、刪除整行:https://www.cnblogs.com/tooker/p/14668058.html
awk簡單用法:https://www.cnblogs.com/tooker/p/14677718.html
wc -l :https://www.cnblogs.com/tooker/p/14677913.html
本文參考地址:https://blog.csdn.net/weixin_39153210/article/details/98937525
https://blog.csdn.net/Tha_Real/article/details/108117612
本文出自作者原創,未經允許切勿轉載