完美解決Linux服務器tomcat開機自啟動問題


經過多次測試終於徹底解決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去執行。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM