场景:当我使用springboot开发完我的项目的时候,我使用jar包的方式打包,并准备放到服务器上运行,但是出现了一个困扰,就是当我使用java -jar命令来运行我的项目的时候,项目并不能像redis那样设置后台运行,只要我关闭当前操作的shell会话,那么该项目进程就会被终止,那么我该怎样使其能在后台运行而不受我当前会话的影响呢?CentOS7的systemd注册服务就能解决这个问题。
1.进入/etc/systemd/system目录
[root@iZ2ze9twtxjrbirmldp9owZ software]# cd /etc/systemd/system
2.创建服务
[root@iZ2ze9twtxjrbirmldp9owZ system]# touch zaomianbao.service
3.服务设置
[Unit]
Description=zaomianbao
[Service]
ExecStart= /software/jdk1.8.0_171/bin/java -jar /software/demo-0.0.1-SNAPSHOT.jar
[Install]
WantedBy=multi-user.target
根据你自己的情况修改Description和ExecStart的内容,我这里叫zaomianbao是根据我的域名来设置的,你自己根据自己的喜好,我这里的ExecStart是java -jar的执行命令,这是启动我的服务的关键。
4.开启服务
[root@iZ2ze9twtxjrbirmldp9owZ system]# systemctl start zaomianbao.service
我们来访问一下www.zaomianbao.com,看到服务启动成功
5.停止服务
[root@iZ2ze9twtxjrbirmldp9owZ system]# cd /etc/systemd/system
我们再来访问一下www.zaomianbao.com,发现已经无法访问,服务成功停止
6.服务状态
[root@iZ2ze9twtxjrbirmldp9owZ system]# systemctl status zaomianbao
7.查看日志
[root@iZ2ze9twtxjrbirmldp9owZ system]# journalctl -u zaomianbao
-- Logs begin at Thu 2018-06-21 03:17:47 CST, end at Thu 2018-06-21 11:38:22 CST. --
Jun 21 11:14:09 iZ2ze9twtxjrbirmldp9owZ systemd[1]: Started zaomianbao.
Jun 21 11:14:09 iZ2ze9twtxjrbirmldp9owZ systemd[1]: Starting zaomianbao...
Jun 21 11:14:12 iZ2ze9twtxjrbirmldp9owZ java[19278]: . ____ _ __ _ _
Jun 21 11:14:12 iZ2ze9twtxjrbirmldp9owZ java[19278]: /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
Jun 21 11:14:12 iZ2ze9twtxjrbirmldp9owZ java[19278]: ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
Jun 21 11:14:12 iZ2ze9twtxjrbirmldp9owZ java[19278]: \\/ ___)| |_)| | | | | || (_| | ) ) ) )
Jun 21 11:14:12 iZ2ze9twtxjrbirmldp9owZ java[19278]: ' |____| .__|_| |_|_| |_\__, | / / / /
Jun 21 11:14:12 iZ2ze9twtxjrbirmldp9owZ java[19278]: =========|_|==============|___/=/_/_/_/
Jun 21 11:14:12 iZ2ze9twtxjrbirmldp9owZ java[19278]: :: Spring Boot :: (v1.5.10.RELEASE)
Jun 21 11:14:13 iZ2ze9twtxjrbirmldp9owZ java[19278]: 2018-06-21 11:14:13.123 INFO 19278 --- [ main]
8.设置开机启动
[root@iZ2ze9twtxjrbirmldp9owZ system]# systemctl enable zaomianbao
Created symlink from /etc/systemd/system/multi-user.target.wants/zaomianbao.service to /etc/systemd/system/zaomianbao.service.
[root@iZ2ze9twtxjrbirmldp9owZ system]#
总结
当然我们也可以使用init.d来注册服务,如果用Docker容器部署当然也就没这个问题了。