前言
很多情况下通过Java编写的后端程序需要开机自启动,网上找了这方面的教程,方法也是多种多样。
Linux系统可通过init.d、systemd至少两种方式实现将jar包注册为系统服务并配置为开机自启,相对而言,systemed比init.d晚出现,在性能、功能等方面都有改进,被推荐使用,本文将采用systemed。
Windows系统有使用启动脚本加入启动目录的,有使用修改注册表的,有使用procrun的,最终我选择了winsw的解决方案,这也是Spring官方推荐使用的方式。
多个项目的开发经验告诉我,使用开源框架遇到问题首先应当想到官方文档,而不是使用baidu、google搜索,你遇到的这些问题,很可能框架开发者早已经帮你想好了对策。
gradle配置文件demo.gradle
使用gradle编译打包的基于springboot的jar包通常使用如下命令启动:
java -jar demo.jar
如果在demo.gradle下加入如下配置:
注意:此配置适用于springboot 1.5.x版。
springBoot {
executable = true
}
多数Linux系统分支支持这个配置,如:CentOS、Ubuntu,其他的OS X和FreeBSD需要用户验证embeddedLaunchScript。
如果在demo.gradle中加入上述配置,则可以使用如下命令:
./demo.jar
运行你的应用程序。
Linux下通过systemed部署为系统服务
将你的应用程序demo.jar放到/opt/demo下。
创建一个名为demo.service的脚本放入/etc/systemd/system下,脚本内容如下:
[Unit]
Description=Demo
After=syslog.target
[Service]
ExecStart=/opt/demo/demo.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
要让该service能开机自启动,使用如下命令:
systemctl enable demo.service
除此之外,还能使用start,stop,restart,status等命令。
Windows下通过winsw部署为系统服务
将你的应用程序demo.jar放到C:\app\demo下。
下载winsw-{{version}}-bin.exe放到C:\app\demo下,并改名为demo.exe。
创建一个名为demo.xml的文件放到C:\app\demo下,文件内容如下:
<service>
<id>demo</id>
<name>demo</name>
<description>This service runs demo continuous integration system.</description>
<executable>java</executable>
<onfailure action="restart" delay="60 sec"/>
<arguments>-Xrs -Xmx256m -jar "C:\app\demo\demo.jar" --httpPort=8080</arguments>
<logmode>rotate</logmode>
</service>
将该应用程序安装为系统服务,在C:\app\demo下执行如下命令:
demo.exe install
要删除该系统服务,使用如下命令:
demo.exe uninstall
此外还有start,stop,restart,status等命令可用。
更多配置请参考:winsw github