我們將springboot 打成jar包後 上傳至服務器 。
用命令行啓動jar 包有幾種方式
// 直接在控制檯進行啓動,缺點就是控制檯關閉項目也就關閉了。
java -jar bootdo.jar
// 這種方式可以運行在後臺,但是如果推出了shell的話,那也會掛
java -jar /bootdo-2.0.0.jar > bootdolog.file 2>&1 &
// 加上nohup的話,即使推出shell,也不影響。
nohup java -jar /bootdo-2.0.0.jar > bootdolog.file 2>&1 &
nohup表示永久運行 ,即使退出ssh連接依然在運行
& 表示後臺運行 退出了ssh連接後 就會停止運行
> 代表重定向到哪裏
1 表示stdout標準輸出,系統默認值是1,所以”>/dev/null”等同於”1>/dev/null”
2 表示stderr標準錯誤
其實通過方式三我們就可以實現 項目始終運行 ,如果 需要重新啓動 那麼你需要通過 ps -ef | grep xia17user 查詢到進程號,在通過 kill -s 9 ${pid} 殺死進程 在重新啓動 ,挺麻煩的。
其實到這我們就可以想到用 sh 腳本來實現項目的啓動、重啓、關閉 等操作
新建一個腳本
#!/bin/bash
#這裏可替換爲你自己的執行程序,其他代碼無需更改
APP_NAME=websocketserver-0.0.1-SNAPSHOT.jar
#使用說明,用來提示輸入參數
usage() {
echo "Usage: sh 腳本名.sh [start|stop|restart|status]"
exit 1
}
#檢查程序是否在運行
is_exist(){
pid=`ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}' `
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}
#啓動方法
start(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is already running. pid=${pid} ."
else
nohup java -jar /mnt/ssd1/project/websocket/$APP_NAME > /mnt/ssd1/project/websocket/websocketserverlog.file 2>&1 &
echo "${APP_NAME} start success"
fi
}
#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}
#輸出運行狀態
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}
#重啓
restart(){
stop
start
}
#根據輸入參數,選擇執行對應方法,不輸入則執行使用說明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac
在這裏有我將 > /mnt/ssd1/project/websocket/websocketserverlog.file 直接刪除了 ,因爲我不知道他是幹嘛的、、還有前面的文件路徑我也直接使用的是相對路徑 $APP_NAME 這個變量的值需要自己修改成文件名。
這裏的話參考下文章:https://blog.csdn.net/geekster/article/details/6657620 講述了 nohup 命令
補充下
sh xxx.sh與./xxx.sh區別
sh xxx.sh 是不需要有執行權限
./xxx.sh 是需要有執行權限的,可以通過 chmod +x xxx.sh 賦予權限
如果你是在windows 下寫的腳本然後上傳到服務器你需要改變下文件格式 使用sed命令sed -i "s/\r//" filename 或者 sed -i "s/^M//" filename直接替換結尾符爲unix格式
參考博客:https://blog.csdn.net/hxpjava1/article/details/79711710
注:全文參考:http://www.west.cn/docs/51562.html 侵刪