Linux定義腳本自啓服務歷程
全部腳本內容
#!/bin/sh
# chkconfig:2345 60 30
# description:te
export JAVA_HOME=/home/java/jdk1.8.0_211/
export PATH=$JAVA_HOME/bin:$PATH
su - testShell -c 'nohup java -jar /home/csdn/csdnDownload-0.0.1-SNAPSHOT.jar --server.port=18080 &'
rm -rf /home/start.log
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: csdn web服務啓動情況" >> /home/start.log
sleep 60;
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: csdn web服務啓動情況" >> /home/start.log
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: netstat -tunlp|grep 18080" >> /home/start.log
echo "`netstat -tunlp|grep 18080`" >> /home/start.log
啓動服務
#!/bin/sh
# chkconfig:2345 60 30
# description:te
export JAVA_HOME=/home/java/jdk1.8.0_211/
export PATH=$JAVA_HOME/bin:$PATH
cd /home/csdn
nohup java -jar csdnDownload-0.0.1-SNAPSHOT.jar --server.port=18080 &
首先進入對應jar包所在目錄,運行相關命令,但是發現腳本無法識別java
,所以手動增加了JAVA_HOME
和PATH
。成功運行。
增加日誌
爲了防止有部分服務啓動失敗,卻無法得知,所以增加日誌文件。通過查看端口是否被佔用判斷是否正常運行。
所以增加命令echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: csdn web服務啓動情況" > /home/start.log
。
但是每次都有一行文字,且tail -f /home/start.log
會有tail: /home/start.log: file truncated
這種報錯,百度後發現echo命令後面的>一個是覆蓋,相當於刪除後在寫入。兩個則是纔是追加。
又因爲服務啓動需要時間,防止出現服務正在啓動,而日誌已經寫入,加入沉睡時間。
#!/bin/sh
# chkconfig:2345 60 30
# description:te
export JAVA_HOME=/home/java/jdk1.8.0_211/
export PATH=$JAVA_HOME/bin:$PATH
nohup java -jar /home/csdn/csdnDownload-0.0.1-SNAPSHOT.jar --server.port=18080 &
rm -rf /home/start.log
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: csdn web服務啓動情況" >> /home/start.log
sleep 60;
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: csdn web服務啓動情況" >> /home/start.log
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: netstat -tunlp|grep 18080" >> /home/start.log
echo "`netstat -tunlp|grep 18080`" >> /home/start.log
切換別的用戶運行命令
有的時候服務需要使用特定的用戶啓動,那麼這個時候則需要切換用戶運行。加入su
命令。
su - 用戶名 -c '命令內容'
,注意-
和用戶名
之間一定要有空格。
如果切換用戶時需要輸入密碼,則需要使用expect
命令。expect命令詳解
最終命令如下:
#!/bin/sh
# chkconfig:2345 60 30
# description:te
export JAVA_HOME=/home/java/jdk1.8.0_211/
export PATH=$JAVA_HOME/bin:$PATH
su - testShell -c 'nohup java -jar /home/csdn/csdnDownload-0.0.1-SNAPSHOT.jar --server.port=18080 &'
rm -rf /home/start.log
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: csdn web服務啓動情況" >> /home/start.log
sleep 60;
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: csdn web服務啓動情況" >> /home/start.log
echo "##############$(date +%Y-%m-%d\ %H:%M:%S)###############: netstat -tunlp|grep 18080" >> /home/start.log
echo "`netstat -tunlp|grep 18080`" >> /home/start.log
接收start、stop、status等參數
#!/bin/sh
# chkconfig:2345 60 30
# description:te
export JAVA_HOME=/home/java/jdk1.8.0_211/
export PATH=$JAVA_HOME/bin:$PATH
case $1 in
start) su root /opt/cloud/zookeeper-3.4.6/bin/zkServer.sh start;;
stop) su root /opt/cloud/zookeeper-3.4.6/bin/zkServer.sh stop;;
status) su root /opt/cloud/zookeeper-3.4.6/bin/zkServer.sh status;;
restart) su root /opt/cloud/zookeeper-3.4.6/bin/zkServer.sh restart;;
*) echo "require start|stop|status|restart" ;;
esac