背景
运维同学希望服务器若遇故障重启时,可以自动启动把系统应用服务,不需要人为拉起。我们服务器是Linux系统,网上这类文章也比较多,今天下午抽空做了个实验,可行,记录一下,以备后绪查找。我这边用的是systemctl方式做为开机自启
自定义应用服务启动脚本
我们是boot项目,由于是测试环境,所以里面结构有点乱如下图所示
以下是a_start.sh和a_stop.sh自定义启动脚本
(1) a_start.sh
#!/bin/bash
#nohup java -jar api.jar --spring.config.location=file:application_a.yml 1>/dev/null 2>/dev/null &
#-XX:+PrintGC 输出GC日志
#-XX:+PrintGCDetails 输出GC的详细日志
#-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
#-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
#-XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息
#-Xloggc:../logs/gc.log 日志文件的输出路径
cd /opt/supervison/ && nohup java -jar -XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:./gc.log api.jar --spring.config.location=file:application_a.yml > api.log 2>&1 &
(2)a_stop.sh
#!/bin/bash
pid=`ps -ef | grep java | grep api | awk '{ print $2}'`
kill -9 $pid 1 > /dev/null 2> /dev/null
以上两个脚本编写完后保存退出
定义service服务
(1) vi /etc/systemd/system/supervison.service
(2) 给启动服务增加内容如下所示:
[Unit]
Description=Supervisor process control system for Linux
Documentation=http://supervisord.org
After=network.target
[Service]
**Type=forking
ExecStart= /opt/supervison/a_start.sh
ExecStop= /opt/supervison/a_stop.sh**
KillMode=process
Restart=on-failure
RestartSec=50s
[Install]
WantedBy=multi-user.target
(3) 保存服务并退出执行以下命令让以上服务生效
systemctl enable supervison.service
注:看是否生效的命令可以用以下: systemctl list-unit-files --type=service |grep supervison,如下图所示:
(4) 可以通过systemctl start /stop supervison.service 启动/停目服务了,也可以reboot重启服务器看应用是否能被成功拉起,经测试OK了
注意事项说明
(1) 注意a_start.sh 里面启动的jar的路径,不然通这service启动无法成功启动
(2) 注意a_start.sh 权限,给出chmod 777 ,否则调用有权限问题