前幾天剛學了一點shell腳本,立馬測試一下,寫一個定時重新開機的腳本。
腳本編寫
shell基礎知識
想好處理邏輯後剩下的就是具體的實作:查詢目前tomcat的pid ,
kill
程序更直接(不用
shutdown.sh
是因為有時候關不掉),然後重新開機tomcat(使用
startup.sh
)。過程就這麼簡單,實作的過程卻很坎坷。
vi tomcat_restart.sh
chmod +x tomcat_restart.sh
- java環境,需要在腳本裡聲明,不然
startup.sh
啟動不了(報環境錯誤,消耗了4個小時解決)。
// 查詢目前的tomcat jdk路徑
#!/bin/sh # the jdk path echo "*****************start**************" export JAVA_HOME=/home/jdk/jdk1.8.0_161
-
擷取tomcat 程序的ID,需要指定需要重新開機的tomcat路徑(系統中會運作多個tomcat)——(耗時四個小時)
// 有兩種指定tomcat 的路徑
- shell 腳本存放位置任意時,變量聲明指定
# the tomcat path & script path anywhere tomcat_path='/home/*/*/tomcat'
- 需将shell腳本存放于tomcat的根目錄下
# the tomcat path & script path in the root of tomcat tomcat_path=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
# check and get the tomcat Pid tomcat_id=`ps -ef|grep ${tomcat_path} | grep -v grep | awk '{print $2}'`
- shell 腳本存放位置任意時,變量聲明指定
-
開始執行删除、重新開機操作。
// 删除
// 重新開機# shutdown tomcat and restart if [ ${tomcat_id} = "" ] then echo 'no tomcat pid alive' else echo "the tomcat's pid is ${tomcat_id} and will kill it " kill -9 ${tomcat_id} tomcat_id=`ps -ef|grep ${tomcat_path} | grep -v grep | awk '{print $2}'` if [ ${tomcat_id} = "" ] then echo 'killed pid success!' fi fi
# restart the tomcat # start ${tomcat_path}/bin/startup.sh # check the tomcat pid is exist tomcat_id=`ps -ef|grep ${tomcat_path} | grep -v grep | awk '{print $2}'` if test -z ${tomcat_id} then echo "the path of ${tomcat_path} restart faild" else echo "the path of ${tomcat_path} restart success" echo "the tomcat pid is ${tomcat_id}" fi echo "************end**************"
腳本編寫完畢,可單個測試,執行腳本。
./tomcat_restart.sh
- 加入定時器、系統定時執行該腳本
說明:crontab -h // 檢視crontab的使用 crontab -l // 列出目前的定時任務 crontab -e // 編譯、添加定時任務 // 格式: */5 * * * * cd /home/*/*/ & ./tomcat_restart.sh > /home/*/*/restart.log // 每個五分鐘執行一次
表示任何時候 //分 時 日 月 周* * * * *
分割,多個時間點,如1點和4點,
1,4
分割 ,一段時間範圍内,如1點到四點-
1-4
間隔,沒個多少時間,每5分鐘,/n
*/5
需要注意的是,定時任務中,對于腳本的存放目錄也有要求,先進入到目錄下,在執行
cd /home/*/*
./tomcat_restart.sh
文中列出的幾個點都是踩過的坑,也查詢了好多資料。
感謝所有資料的網友。