Java后端变成运维的道路
在部署项目在服务器的时候,重新启动一个jar文件总是要三部曲,查询服务进程,停止服务进程,重新启动jar包,刚开始可以记一记,重启的多了,就像流水线般了,所以查看了一些前辈的博客,记录下第一次写脚本的经历。
获取到指定的线程Id
# $1变量是自己shell运行后面跟的第一个参数
# grep -v grep 是在列出的进程中去除含有关键字 grep 的进程
# grep -v /bin/sh 是在列出的进程中去除含有关键字 /bin/sh 的进程 为了排除 shell运行的进程,因为在杀死原来的Java进程后还要执行启动的Java
# awk '{print $2}' 一行一行的读取指定的文件, 以空格作为分隔符,打印第二个字段
ps -ef|grep $1|grep -v grep|grep -v PPID|grep -v /bin/sh|awk '{print $2}'
脚本内容如下
#!/bin/sh
#根据进程名杀死进程
if [ $# -lt 1 ]
then
echo "缺少重启项目名称"
exit 1
fi
# 根据输入的应用名,找出指定的应用的进程Id
PROCESS=`ps -ef|grep $1|grep -v grep|grep -v PPID|grep -v /bin/sh|awk '{print $2}'`
# 然后打印杀死进程的Id
echo "Kill the $1 process [ ${PROCESS[0]} ]"
# 杀死指定的进程
kill -9 $PROCESS
echo "执行-----启动"
# 根据指定的应用名称启动指定的应用
if [ $1 = "gateway-1.0.jar" ]
then
echo "网关重启"
cd /usr/local/project
nohup java -jar $1 >nohup.out 2>&1 &
exit 1
fi
if [ $1 = "enterprise-1.0.jar" ]
then
echo "企业端重启"
cd /usr/local/project
nohup java -jar $1 >nohup.out 2>&1 &
exit 1
fi
if [ $1 = "management-1.0.jar" ]
then
echo "管理端重启"
cd /usr/local/project
nohup java -jar $1 >nohup.out 2>&1 &
exit 1
fi
if [ $1 = "user-1.0.jar" ]
then
echo "用户端重启"
cd /usr/local/project
nohup java -jar $1 >nohup.out 2>&1 &
exit 1
fi
除了一些特定的语法,结构有点相似Java的语法结构,所以看看就知道怎么修改了
将脚本上传服务器,-bash: ./restart.sh: 权限不够,权限不够开启执行的权限,可以指定组开放
如果你是在windows中编译的脚本文件,会报错:-bash: ./restart.sh: /bin/sh^M: 解释器错误: 没有那个文件或目录
windows编译器和linux编译器有所差异,使用命令《sed -i ‘s/\r$//’ 你的脚本文件》,再执行脚本即可
编译时报 bad substitution 错误
由于使用的编译器不同导致, 需要使用shell为 #!/bin/bash 即可。
找出指定的应用的进程的命令将 sh 更改为 bash 即可正常使用。