问题:实际生产中,有些项目采用jar包的形式部署在服务器上,如果手动启动需要敲很长的命令,如 nohup java -jar target.jar --spring.profiles.avtive=prod --server.port=8080 ,很麻烦。
需求:使用systemctl 命令进行启停java服务。
解决方案:
1、编写启停项目脚本
vim web.sh
#!/bin/bash
#
source /etc/profile
jarName="web.jar"
workDir="/opt/webApp"
start(){
cd ${workDir} && nohup java -jar ${jarName} --spring.profiles.active=prod --server.port=8080 >demo.log 2>&1 &
}
stop(){
ps -ef | grep -qP "(?<=-jar)\s+${jarName}" && kill $(ps -ef | grep -P "(?<=-jar)\s+${jarName}" | awk '{print $2}')
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
esac
赋予执行权限
chmod +x xxxx.sh
2、编写systemd配置文件
vim /usr/lib/systemd/system/web.service
[Unit]
Description=web server
Wants=network-online.target
After=network.target
[Service]
Type=forking
WorkingDirectory=/opt/webApp
ExecStart=/bin/bash web.sh start
ExecStop=/bin/bash web.sh stop
ExecReload=/bin/bash web.sh restart
Restart=on-failure
[Install]
WantedBy=multi-user.target
加载服务
systemctl daemon-reload
3、web项目服务管理命令
# 启动
systemctl start web
# 关闭
systemctl stop web
# 重新启动
systemctl restart web
# 开机自启动
systemctl enable web