1

我正在尝试使用 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。错误 -pidfile /tmp/example.pid daemonexample.DaemonExample

当我运行它时,我得到:“将标准输出重定向到 /tmp/example.out 并将标准错误重定向到 /tmp/example.err”。但是目标文件是空的。我在这里想念什么?

4

2 回答 2

0

检查您的 /tmp/example.err。它应该包含错误详细信息。

以下可能是问题:

1: you forgot import org.apache.commons.daemon.*; ?
2: if yes, then DaemonExample.class is not getting created.
3: make sure DaemonExample.class exists in DaemonExample.jar
4: jsvc, usually must be called using full path. i.e. /usr/bin/jsvc .... check your debug info
于 2012-12-31T14:54:11.677 回答
-2

转储已解析的命令行参数 | 分离:真 | 显示版本:否 | 显示帮助:否 | 仅检查:已禁用 | 停止:假 | 等待:0 | 作为服务运行:否 | 安装服务:否 | 删除服务:否 | JVM 名称:“空”| Java 主页:“/库/Java/主页”| PID 文件:“/tmp/example.pid”| 用户名:“根”| 额外选项:1 | "-Djava.class.path=/Users/username/NetBeansProjects/DaemonExample/dist/DaemonExample.jar" | 调用的类:“daemonexample.DaemonExample”| 类参数:0

无需将用户更改为“root”!用户 'root' 验证 Home 未在命令行上指定,使用环境 Home 不在命令行或环境中,正在搜索 试图在 /System/Library/Frameworks/JavaVM.framework/Home 中找到 Java Home 试图找到 VM 配置文件 /System /Library/Frameworks/JavaVM.framework/Home/jre/lib/jvm.cfg 试图定位 VM 配置文件 /System/Library/Frameworks/JavaVM.framework/Home/lib/jvm.cfg 在 /System/ 找到 VM 配置文件Library/Frameworks/JavaVM.framework/Home/lib/jvm.cfg 在配置中找到VM客户端定义 检查库/System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libclient.dylib 在配置中找到VM jvm定义检查库/System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libjvm。dylib 在配置中找到VM热点定义 检查库/System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libhotspot.dylib 在配置中找到VM服务器定义 检查库/System/Library/Frameworks/JavaVM.framework/Home /../Libraries/libserver.dylib 在配置中找到 VM 经典定义 检查库 /System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libclassic.dylib 找不到 VM 经典的库(跳过)Java 主页位于在/System/Library/Frameworks/JavaVM.framework/Home DUMPING JAVA HOME STRUCTURE | Java 主页:“/System/Library/Frameworks/JavaVM.framework/Home” | Java VM 配置:“/System/Library/Frameworks/JavaVM.framework/Home/lib/jvm.cfg”| 找到的 JVM:4 | JVM 名称:“客户端”| "

将 stdout 重定向到 /tmp/example.out 并将 stderr 重定向到 /tmp/example.err

于 2013-01-02T16:51:55.290 回答