关于 systemctl 的用法,大家自行百度
kbase-conference.service 的 demo 如下
[Unit]
Description=kbase-conference
After=network.target remote-fs.target nss-lookup.target
[Service]
Type=forking
ExecStart=/home/ibotkbs/kbase-conference/startup.service.sh
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/home/ibotkbs/kbase-conference/shutdown.sh
PrivateTmp=true
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
/home/ibotkbs/kbase-conference/startup.service.sh 文件内容如下
#!/bin/sh
/home/ibotkbs/jdk1.8.0_151/bin/java -Xmn384M -Xmx1024M -Xms1024M -Xss256k -jar /home/ibotkbs/kbase-conference/kbase-conference-0.0.1-SNAPSHOT.jar -java.io.tmpdir=/home/ibotkbs/tmp --spring.config.location=/home/ibotkbs/kbase-conference/config/application.properties --spring.profiles.active=dev > /home/ibotkbs/kbase-conference/logs/stdout.log &
/home/ibotkbs/kbase-conference/shutdown.sh 文件内容如下:
#!/bin/sh
kill -9 `ps -ef|grep java|grep -v grep|grep kbase-conference|awk '{print $2}'`
注意事项
1、spring boot 这里主要遇到的问题是配置文件的指定,主要加上下面这句,就可以读到配置
--spring.config.location=/home/ibotkbs/kbase-conference/config/application.properties
2、startup.sh 中一定要用守护进程,否则 systemctl start 超过 90 秒会自动停掉,有一个超时的报错
[root@rabbitmq01 ~]# systemctl status kbase-conference.service
● kbase-conference.service - kbase-conference
Loaded: loaded (/usr/lib/systemd/system/kbase-conference.service; enabled; vendor preset: disabled)
Active: failed (Result: timeout) since Fri 2018-03-30 19:13:44 CST; 3min 33s ago
Process: 4172 ExecStart=/home/ibotkbs/kbase-conference/startup.service.sh (code=killed, signal=TERM)
Mar 30 19:12:13 rabbitmq01 systemd[1]: Starting kbase-conference...
Mar 30 19:13:44 rabbitmq01 systemd[1]: kbase-conference.service start operation timed out. Terminating.
Mar 30 19:13:44 rabbitmq01 systemd[1]: Failed to start kbase-conference.
Mar 30 19:13:44 rabbitmq01 systemd[1]: Unit kbase-conference.service entered failed state.
Mar 30 19:13:44 rabbitmq01 systemd[1]: kbase-conference.service failed.