[英]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
目录。 该脚本至少应支持start
, stop
和status
参数。 在启动过程中,它应该通过适当的参数(可能通过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):
您可以使用cron作业来安排程序。 您也可以看看这个文章就如何在启动时运行脚本的详细信息。 您可以编写一个脚本来运行您的Java程序,并按照本文所述在启动时运行它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.