Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将现有Java应用程序转换为SYS V服务(守护进程)_Java_Service_Daemon_Sysv - Fatal编程技术网

如何将现有Java应用程序转换为SYS V服务(守护进程)

如何将现有Java应用程序转换为SYS V服务(守护进程),java,service,daemon,sysv,Java,Service,Daemon,Sysv,我有一个Java应用程序,我用它来启动它 java-jarmyapp.jar 要停止它,我使用CTRL+C 现在,我需要将该应用程序转换为可以从以下内容开始的内容: /etc/init.d/myapp start 我可以停下来说: /etc/init.d/myapp-stop 问题在于保存流程的PID,我想我在某处看到了这样做的方法,我不记得在哪里,也找不到它 我看到有一个名为的项目,但我寻找一些不限制内存使用的免费项目。我认为这项工作可以在一个bash脚本中完成 它有“jsvc”启动器,支持启

我有一个Java应用程序,我用它来启动它

java-jarmyapp.jar

要停止它,我使用CTRL+C

现在,我需要将该应用程序转换为可以从以下内容开始的内容:

/etc/init.d/myapp start

我可以停下来说:

/etc/init.d/myapp-stop

问题在于保存流程的PID,我想我在某处看到了这样做的方法,我不记得在哪里,也找不到它

我看到有一个名为的项目,但我寻找一些不限制内存使用的免费项目。我认为这项工作可以在一个bash脚本中完成


它有“jsvc”启动器,支持启动和停止基于java的守护进程(服务)。

首先,在*nix上保存PID:

$ ./yourprogram &
$ echo $! > /var/run/yourpid
您的PID现在将包含您的PGRAM的PID,并且/var/run是放置它的合适位置

以上内容可以放在“开始”脚本中。 “停止”脚本可以查看您的PID以知道要杀死什么

如果您想变得更优雅并正确停止应用程序,可以查看Tomcat的org.apache.catalina.startup.catalina.java的源代码,了解如何实现正确的关机挂钩

其次,上述“停止”和“开始”脚本可以放在/etc/init.d/mystopstartscript中:

#!/bin/bash
# processname: yourprogram
# pidfile: /var/run/yourpid

case $1 in
start)
        sh /some/where/start.sh
        ;;
stop)  
        sh /some/where/stop.sh
        ;;
restart)
        sh /some/where/stop.sh
        sh /some/where/start.sh
        ;;
esac   
exit 0

这是一个相当土生土长的解决方案,主要是从优秀的“ol Tomcat”那里获得的想法,但我希望它能有所帮助:)

你所说的“不限制内存使用”是什么意思?Sun的JVM内存使用总是有限的(如果您不指定-Xmx,则有一个默认值)。@alex,可能我没有正确理解此页Andrea:Sun JVM总是有一些内存限制。如果不明确设置,则为64m。由于64m不是很多,您通常总是希望自己更改此值。Java服务包装器似乎可以使用百分比设置此限制,而不是像通常情况那样仅使用绝对值。