經過多次測試終於徹底解決tomcat開機自啟動的問題了
PID3=`ps aux | grep /home/server/shichuan/ | grep java | awk '{print $2}'`
if [ -n "$PID3" ]; then
這個判斷pid的方式還是可能出現啟動失敗的情況
# tail -n 1 /home/server/shichuan/logs/catalina.out |grep 'INFO: Server startup in'
INFO: Server startup in 37417 ms
這個才是真正的啟動成功,由於是用autostart的方式會先執行停止后啟動,一定不會重新最后一行是之前啟動成功留下來的
啟動成功需要40秒左右,應該先sleep 足夠長的時間再檢測,否則會出現啟動多個tomcat進程的問題
一次性殺掉多個tomcat進程命令:
ps -ef|grep -v grep|grep /home/server/shichuan/ | grep java |awk '{print "kill -9 "$2}'|sh
$TOMCAT_PATH/startup.sh
sleep 60
for((i=1;i<10;i++))
do
LASTINFO=`tail -n 1 /home/server/shichuan/logs/catalina.out |grep 'INFO: Server startup in'`
if [ -n "$LASTINFO" ]; then
break
else
ps -ef|grep -v grep|grep /home/server/shichuan/ | grep java |awk '{print "kill -9 "$2}'|sh
sleep 1
$TOMCAT_PATH/startup.sh
sleep 60
fi
done
設置權限:chmod 777 autostart.sh
在/etc/rc.d/rc.local中加入腳本:
vim /etc/rc.local
/home/server/shichuan/bin/autostart.sh
保存並退出,下次重啟會生效。
============================
ps -ef|grep -v grep|grep /home/server/shichuan/ | grep java
ps aux | grep /home/server/shichuan/ | grep java | awk '{print $2}'
ps -ef|grep -v grep|grep /home/server/shichuan/ | grep java |awk '{print "kill -9 "$2}'
ps -ef|grep -v grep|grep /home/server/shichuan/ | grep java |awk '{print "kill -9 "$2}'|sh
ps -ef | 獲取當前服務器所有進程
grep -v grep 相當於grep自己吧自己過濾掉,就是不顯示grep
grep /home/server/shichuan/ | grep java 過濾出包含這些內容,即過濾出對應的pid
awk 截取 $2 第二個域的pid號。通過調用外部命令kill 來干掉
|sh 把前面print輸出的內容作為命令執行
===========================
其他相關命令:
service nginx restart
ls -lh /home/server/shichuan/bin/autostart.sh
cd /home/server/shichuan/bin/
vim /home/server/shichuan/bin/autostart.sh
tail -f /home/server/shichuan/logs/catalina.out
===========================
下面是autostart.sh的內容:
#!/bin/sh TOMCAT_PATH=/home/server/shichuan/bin ps -ef|grep -v grep|grep /home/server/shichuan/ | grep java |awk '{print "kill -9 "$2}'|sh sleep 10 $TOMCAT_PATH/startup.sh sleep 60 for((i=1;i<10;i++)) do LASTINFO=`tail -n 1 /home/server/shichuan/logs/catalina.out |grep 'INFO: Server startup in'` if [ -n "$LASTINFO" ]; then break else ps -ef|grep -v grep|grep /home/server/shichuan/ | grep java |awk '{print "kill -9 "$2}'|sh sleep 1 $TOMCAT_PATH/startup.sh sleep 60 fi done
==============
“|”是管道符,代表將它左邊的命令產生的輸出,作為標准輸出,再作為標准輸入,匯入到右邊的命令里。| sh 簡單來說就是把左邊sh文件的內容交給右邊sh去執行。