【发布时间】:2012-12-31 11:40:41
【问题描述】:
我正在尝试使用 JSVC 将 java 程序作为守护程序运行。这是我使用的简单代码:
package daemonexample;
public class DaemonExample implements Daemon {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
}
@Override
public void init(DaemonContext dc) throws DaemonInitException, Exception {
System.out.println("initializing ...");
}
@Override
public void start() throws Exception {
System.out.println("starting ...");
}
@Override
public void stop() throws Exception {
System.out.println("stopping ...");
}
@Override
public void destroy() {
System.out.println("done.");
}
}
还有命令:jsvc -debug -home $JAVA_HOME -cp /path/to/commons-daemon.jar:/path/to/DaemonExample.jar -user coder -outfile /tmp/example.out -errfile /tmp /example.err -pidfile /tmp/example.pid daemonexample.DaemonExample
当我运行它时,我得到:“将标准输出重定向到 /tmp/example.out 并将标准错误重定向到 /tmp/example.err”。但是目标文件是空的。我在这里错过了什么?
【问题讨论】:
-
我知道 Jsvc 带来的唯一一个特性是 JVM 能够以 root 身份启动,绑定到特权端口,然后切换到非特权用户。其中没有任何东西真正使 Java 应用程序作为守护程序运行变得更容易。你可以很容易地
nohup java -jar foo.jar &或其他任何东西。您可能只是在为自己购买增加的复杂性而没有任何好处。