Linux 停止與啟動服務器
在日常的開發中,我們經常需要停止tomcat或jetty服務器進行一些操作后,然后重新啟動服務器。
下面即為停止jetty服務器的一段腳本。我們通過腳本來理解一下這里面的腳本
#!/bin/bash
pidlist=`ps -ef|grep start.jar|grep -v "grep"|awk '{print $2}'`
if [ "$pidlist" = "" ];then
echo "no pid alive"
else
for pid in ${pidlist}
{
kill -9 $pid
echo "KILL $pid:"
}
echo "app stop success"
fi
rm -rf /home/user/jetty/data
cd /home/user/jetty
java -jar start.jar
通過jar包尋找其啟動的進程
ps 命令
- -e 顯示所有進程
- -f 全格式
ps -ef 顯示格式:
- 1.UID 用戶ID
- 2.PID 進程ID
- 3.PPID 父進程ID
- 4.C CPU占用率
- 5.STIME 開始時間
- 6.TTY 開始此進程的TTY----終端設備
- 7.TIME 此進程運行的總時間
- 8.CMD 命令名
grep 命令
正則匹配,輸出匹配上數據之外的所有行 -v 選項:
grep -v "match_pattern" file_name
"|"代表其前面的輸出作為后面表達式的輸入
awk '{print $2,$5}'
可以認為是輸出函數 數據行一空格分割,索引從1開始,打印第幾個數據
例如:
執行awk '{print $2,$5}'的輸出結構為:
至此,第一行的腳本我們就知道是什么意思了
pidlist=`ps -ef|grep start.jar|grep -v "grep"|awk '{print $2}'`
查找進程中 包含start.jar的但是又不包含grep 的輸出其第2個參數 即進程的ID--PID
逐條kill進程
使用方法
kill[參數][進程號]
其中參數的類型為:
腳本中使用
kill -9 $pid
意思是強制終止進程
移除文件
rm
- -i 刪除前逐一詢問確認。
- -f 略過不存在的文件,不顯示任何信息,強制刪除
- -r 同時刪除該目錄下的所有目錄層
rm -rf /home/user/jetty/data
強制刪除/home/user/jetty/data下的所有文件及目錄。
java -jar start.jar
重新啟動jetty
在刪除文件前先停止服務器的原因
- 如果不停止服務器,倘若有人使用文件,將會導致程序錯誤
- 如果不停止服務,因為程序持有文件的引用,會導致刪除失敗