繁体   English   中英

Java作为Unix服务运行

[英]Java running as a Unix service [duplicate]

这个问题已经在这里有了答案:

我已经用Java构建了一个小守护进程,我想将它作为服务在Unix下运行(例如Debian 5)。 我读过有可能使用Java包装器,但是难道没有其他更容易实现的选项吗? 我不能只使用xxx java -jar program.jar这样的Unix命令吗?

好吧,即使您退出外壳程序也要运行Java程序,以下是最简单的方法:

$nohup java -jar program.jar &

您需要在/etc/init.d创建适当的脚本并将其链接到/etc/rcX.d目录。 该脚本至少应支持startstopstatus参数。 在启动过程中,它应该通过适当的参数(可能通过nohup java <arguments> &运行java命令。 然后,应将新启动的进程的PID保存到文件/var/run/yourservice.pid stop命令应读取此PID文件并stop该服务。 每个发行版的详细信息各不相同,大多数发行版都提供了一些宏来简化整个工作。 最好查看/etc/init.d中其他服务的示例以进行分发。

另外:如果无法从网络上的其他计算机访问您的服务,但是该服务打开了某些端口,请使其在防火墙中不可用。

如果您的服务处理了一些“微妙的”数据,最好在/etc/init.d文件中添加另一个用户并调用适当的sudo命令。

您可以将其启动为:

java -jar program.jar

Unix守护程序通常由init启动或由/etc/init.d/etc/rc.d的脚本启动,并在特定的运行级别上启动-通常由/etc/rcX.d的软链接启动。 (其中X是预期的“运行级别”,通常为3。

我认为debian正在使用“ upstart”(一种初始化替换)。 它使用/etc/init配置文件来定义作业,并且它们很容易编写。 检查出。

传统上,守护程序关闭stdin,sdtout和stderr,并在启动时执行“双叉”操作,以脱离会话并发出信号,表明它们已准备好处理应处理的任何内容。 只要没有从终端启动守护程序,就没有必要这样做。

如果您想使用简单的外壳包装程序来启动程序,请执行以下步骤: 您只需要编写一个小的Shell脚本:

#!/bin/sh
/full/path/to/java -jar /full/path/to/program.jar

...并使其可执行(chmod 755)

本文包含一些将Java应用程序作为守护程序运行的有用技巧:

http://barelyenough.org/blog/2005/03/java-daemon/

另外,您可以看看Apache Commons Daemon项目,尽管这需要本机代码(支持Unix和Win32):

http://commons.apache.org/daemon/

您可以使用cron作业来安排程序。 您也可以看看这个文章就如何在启动时运行脚本的详细信息。 您可以编写一个脚本来运行您的Java程序,并按照本文所述在启动时运行它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM