在Linux中启动一个像服务一样的jar文件

34

我希望以以下方式启动和停止我的jar文件:

service myService start

service myService stop

我当前正在运行的jar文件如下:

cd /home/alex/IdeaProjects/myService
java -jar target/myService-SNAPSHOT-1.jar server config.yml

我该怎么做?


实现一个包装器服务。进行一些搜索,会显示出一些第三方实现,你可以使用它们。 - Henry
1
复制 https://dev59.com/fmgu5IYBdhLWcg3wnYPo - giorgio79
3个回答

32
您需要一个服务包装器来运行Jar文件。
这里有init.d的示例和说明 链接 或者systemd (ubuntu 16+)的示例和说明 链接

对于那些使用Ubuntu 16+的人,这里提供一些信息。这个程序在Ubuntu 16+上无法运行。你会收到“Failed to start MyService.service: Unit MyService.service not found”的错误提示。 - Dino
systemd 版本运行得非常棒 :D - SubjectX


3
如果您想尝试DIY的方法,可以按照此处所说的方法将启动脚本放置在您的/etc/init.d目录中。

http://www.ghacks.net/2009/04/04/get-to-know-linux-the-etcinitd-directory/

然而,为了实现一个干净的yourScript stop命令,我建议您将功能分成启动器和守护进程,并使您的启动器能够启动或与现有守护进程通信以向其发送命令。然后,您的启动脚本只会调用您的启动器,而启动器会启动一个新的守护进程或向现有守护进程发送命令。

请求:您能否发布一个启动器和守护进程的小例子(针对这个特定情况),或者添加一些有效教程的链接。谢谢。 - Alex Mathew
我恐怕手头没有什么东西。你最好的选择是为管理目的在你的服务中保留一个端口,就像应用服务器一样,并编写一个简单的30-40行程序(你的启动器)来发送命令到该端口。然后你的服务将有一个线程监听该端口,处理重新启动或停止命令。 - Jorge_B
有一段时间以前,我正在解决类似的任务,我记录在 https://jaksky.wordpress.com/2013/11/03/java-application-as-a-linux-service/ 上。 - jaksky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接