注意:
以下脚本笔者是在Windows上编辑的,因此默认格式是dos。
如果在Linux上使用,请使用vi命令编该文件,改为Unix格式。
笔者使用的SpringBoot + jsp 因此使用的是war包,如果你使用的是jar包,在文中用到war的地方改成jar就行。
一:脚本auto_deploy.sh
使用该脚本只需要修改JAR_NAME(改成自己的)、LOG_PATH(改成自己的)、脚本格式(改成Unix格式)这三点就行了。
#!/bin/bash # 定义变量 # 要运行的jar包路径,加不加引号都行。 注意:等号两边 不能 有空格,否则会提示command找不到 JAR_NAME="/xxx/xxx/xxx/xxx.war" # 日志路径,加不加引号都行。 注意:等号两边 不能 有空格,否则会提示command找不到 LOG_PATh=/export/Logs/main.log # 如果输入格式不对,给出提示! tips() { echo "" echo "WARNING!!!......Tips, please use command: sh auto_deploy.sh [start|stop|restart|status]. For example: sh auto_deploy.sh start " echo "" exit 1 } # 启动方法 start() { # 重新获取一下pid,因为其它操作如stop会导致pid的状态更新 pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'` # -z 表示如果$pid为空时执行 if [ -z $pid ]; then nohup java -jar $JAR_NAME > /dev/null 2>&1 & pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'` echo "" echo "Service ${JAR_NAME} is starting!pid=${pid}" echo "........................Here is the log.............................." echo "....................................................................." tail -f $LOG_PATh echo "........................Start successfully!........................." else echo "" echo "Service ${JAR_NAME} is already running,it's pid = ${pid}. If necessary, please use command: sh auto_deploy.sh restart." echo "" fi } # 停止方法 stop() { # 重新获取一下pid,因为其它操作如start会导致pid的状态更新 pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'` # -z 表示如果$pid为空时执行。 注意:每个命令和变量之间一定要前后加空格,否则会提示command找不到 if [ -z $pid ]; then echo "" echo "Service ${JAR_NAME} is not running! It's not necessary to stop it!" echo "" else kill -9 $pid echo "" echo "Service stop successfully!pid:${pid} which has been killed forcibly!" echo "" fi } # 输出运行状态方法 status() { # 重新获取一下pid,因为其它操作如stop、restart、start等会导致pid的状态更新 pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'` # -z 表示如果$pid为空时执行。注意:每个命令和变量之间一定要前后加空格,否则会提示command找不到 if [ -z $pid ];then echo "" echo "Service ${JAR_NAME} is not running!" echo "" else echo "" echo "Service ${JAR_NAME} is running. It's pid=${pid}" echo "" fi } # 重启方法 restart() { echo "" echo ".............................Restarting.............................." echo "....................................................................." # 重新获取一下pid,因为其它操作如start会导致pid的状态更新 pid=`ps -ef | grep $JAR_NAME | grep -v grep | awk '{print $2}'` # -z 表示如果$pid为空时执行。 注意:每个命令和变量之间一定要前后加空格,否则会提示command找不到 if [ ! -z $pid ]; then kill -9 $pid fi start echo "....................Restart successfully!..........................." } # 根据输入参数执行对应方法,不输入则执行tips提示方法 case "$1" in "start") start ;; "stop") stop ;; "status") status ;; "restart") restart ;; *) tips ;; esac
注意事项:
- -z 命令表示如果$pid为空时执行。 注意:每个命令和变量之间一定要前后加空格,否则会提示command找不到
- 要运行的jar包路径,加不加引号都行。 注意:等号两边 不能 有空格,否则会提示command找不到
二:更改脚本格式
注意:以下脚本笔者是在Windows上编辑的,因此默认格式是dos。
如果在Linux上使用,请使用vi命令编该文件,改为Unix格式。
第一步
上传脚本文件到Linux系统后,使用vi命令编辑该脚本文件:
vi auto_deploy.sh
第二步
在Esc模式下冒号输入命令set ff回车就能看到,该脚本是Windows系统的dos格式
如下图:
第三步
在Esc模式下冒号,输入修改格式命令set ff=linux,然后回车(回车后Linux系统并没有提示),完事后还是在Esc模式下输入写入保存命令:wq。
:set ff=linux
:wq
如下图
三:脚本运行截图
服务非启动状态下截图
sh auto_deploy.sh
sh auto_deploy.sh stop
sh auto_deploy.sh status
服务启动状态下截图
sh auto_deploy.sh start
再次启动一下试试(此时会有提示:服务已经启动,启动状态下请使用重启命了):
查看状态(提示正在运行):
sh auto_deploy.sh status
重启试试:
sh auto_deploy.sh restart
停掉服务试试:
sh auto_deploy.sh stop
再次输入stop命令(给出提示:服务没有运行,没必要停止!):
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。