gpt4 book ai didi

java - 如何使用 jsvc 将 java 程序转换为守护进程?

转载 作者:IT老高 更新时间:2023-10-28 20:54:55 29 4
gpt4 key购买 nike

我写了一个程序,现在我希望把它转换成一个守护进程。由于我是一个菜鸟并且对此一无所知,你能告诉我我该怎么做吗?或者你能给我一些基本的教程或阅读资料吗?我真的很想学习如何做到这一点?

谢谢大家

最佳答案

Java 类:

package example;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import org.apache.commons.daemon.*;

class EchoTask extends TimerTask {
@Override
public void run() {
System.out.println(new Date() + " running ...");
}
}

public class Main implements Daemon {

private static Timer timer = null;

public static void main(String[] args) {
timer = new Timer();
timer.schedule(new EchoTask(), 0, 1000);
}

@Override
public void init(DaemonContext dc) throws DaemonInitException, Exception {
System.out.println("initializing ...");
}

@Override
public void start() throws Exception {
System.out.println("starting ...");
main(null);
}

@Override
public void stop() throws Exception {
System.out.println("stopping ...");
if (timer != null) {
timer.cancel();
}
}

@Override
public void destroy() {
System.out.println("done.");
}

}

Shell 启动/停止脚本:

#!/bin/sh

# Setup variables
EXEC=/usr/bin/jsvc
JAVA_HOME=/usr/lib/jvm/java-6-sun
CLASS_PATH="/usr/share/java/commons-daemon.jar":"/path/to/your.jar"
CLASS=example.Main
USER=foo
PID=/tmp/example.pid
LOG_OUT=/tmp/example.out
LOG_ERR=/tmp/example.err

do_exec()
{
$EXEC -home "$JAVA_HOME" -cp $CLASS_PATH -user $USER -outfile $LOG_OUT -errfile $LOG_ERR -pidfile $PID $1 $CLASS
}

case "$1" in
start)
do_exec
;;
stop)
do_exec "-stop"
;;
restart)
if [ -f "$PID" ]; then
do_exec "-stop"
do_exec
else
echo "service not running, will do nothing"
exit 1
fi
;;
*)
echo "usage: daemon {start|stop|restart}" >&2
exit 3
;;
esac

以及效果:

$ ./service start && sleep 5 && ./service stop
$ cat /tmp/example.out
initializing ...
starting ...
Fri Oct 07 16:26:54 EEST 2011 running ...
Fri Oct 07 16:26:55 EEST 2011 running ...
Fri Oct 07 16:26:56 EEST 2011 running ...
Fri Oct 07 16:26:57 EEST 2011 running ...
Fri Oct 07 16:26:58 EEST 2011 running ...
stopping ...
done.

关于java - 如何使用 jsvc 将 java 程序转换为守护进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7687159/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com