简体   繁体   English

使用jsvc守护Java程序

[英]Daemonizing a java program using jsvc

I'm trying to use JSVC to run a java program as a daemon. 我正在尝试使用JSVC将Java程序作为守护程序运行。 This is the simple code that I have used: 这是我使用的简单代码:

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.");
}

} }

And the command: 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 并执行以下命令:jsvc -debug -home $ JAVA_HOME -cp /path/to/commons-daemon.jar:/path/to/DaemonExample.jar-用户编码器-outfile /tmp/example.out -errfile / tmp / example。 err -pidfile /tmp/example.pid daemonexample.DaemonExample

When I run this, I get: "redirecting stdout to /tmp/example.out and stderr to /tmp/example.err". 运行此命令时,我得到:“将stdout重定向到/tmp/example.out,将stderr重定向到/tmp/example.err”。 But the target files are empty. 但是目标文件为空。 What am I missing here? 我在这里想念什么?

checkout your /tmp/example.err. 检出/tmp/example.err。 it should contain error details. 它应该包含错误详细信息。

Following may be the problems: 以下可能是问题所在:

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

DUMPING PARSED COMMAND LINE ARGUMENTS | 递减命令线参数| Detach: True | 分离:真实| Show Version: No | 显示版本:否| Show Help: No | 显示帮助:否| Check Only: Disabled | 仅检查:已禁用| Stop: False | 停止:错误| Wait: 0 | 等待:0 | Run as service: No | 以服务方式运行:否| Install service: No | 安装服务:否| Remove service: No | 删除服务:否| JVM Name: "null" | JVM名称:“ null” | Java Home: "/Library/Java/Home" | Java主页:“ / Library / Java / Home” | PID File: "/tmp/example.pid" | PID文件:“ / tmp / example.pid” | User Name: "root" | 用户名:“ root” | Extra Options: 1 | 额外选项:1 | "-Djava.class.path=/Users/username/NetBeansProjects/DaemonExample/dist/DaemonExample.jar" | “ -Djava.class.path = /用户/用户名/NetBeansProjects/DaemonExample/dist/DaemonExample.jar” | Class Invoked: "daemonexample.DaemonExample" | 调用的类:“ daemonexample.DaemonExample” Class Arguments: 0 类参数:0

No need to change user to 'root'! 无需将用户更改为“ root”! User 'root' validated Home not specified on command line, using environment Home not on command line or in environment, searching Attempting to locate Java Home in /System/Library/Frameworks/JavaVM.framework/Home Attempting to locate VM configuration file /System/Library/Frameworks/JavaVM.framework/Home/jre/lib/jvm.cfg Attempting to locate VM configuration file /System/Library/Frameworks/JavaVM.framework/Home/lib/jvm.cfg Found VM configuration file at /System/Library/Frameworks/JavaVM.framework/Home/lib/jvm.cfg Found VM client definition in configuration Checking library /System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libclient.dylib Found VM jvm definition in configuration Checking library /System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libjvm.dylib Found VM hotspot definition in configuration Checking library /System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libhotspot.dylib Found VM server definition in configuration Checking library /System/L 未在命令行上指定用户'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 / L ibrary/Frameworks/JavaVM.framework/Home/../Libraries/libserver.dylib Found VM classic definition in configuration Checking library /System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libclassic.dylib Cannot locate library for VM classic (skipping) Java Home located in /System/Library/Frameworks/JavaVM.framework/Home DUMPING JAVA HOME STRUCTURE | ibrary / Frameworks / JavaVM.framework / Home /../ Libraries / libserver.dylib在配置中找到VM经典定义检查库/System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libclassic.dylib无法找到库/System/Library/Frameworks/JavaVM.framework/Home中用于VM经典(跳过)Java Home的示例DUMPING JAVA HOME STRUCTURE | Java Home: "/System/Library/Frameworks/JavaVM.framework/Home" | Java主页:“ / System / Library / Frameworks / JavaVM.framework / Home” | Java VM Config.: "/System/Library/Frameworks/JavaVM.framework/Home/lib/jvm.cfg" | Java VM配置:“ / System / Library / Frameworks / JavaVM.framework / Home / lib / jvm.cfg” | Found JVMs: 4 | 找到的JVM:4 | JVM Name: "client" | JVM名称:“客户端” | "/System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libclient.dylib" | “ /System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libclient.dylib” | JVM Name: "jvm" | JVM名称:“ jvm” | "/System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libjvm.dylib" | “ /System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libjvm.dylib” | JVM Name: "hotspot" | JVM名称:“ hotspot” | "/System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libhotspot.dylib" | “ /System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libhotspot.dylib” | JVM Name: "server" | JVM名称:“服务器” | "/System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libserver.dylib" “ /System/Library/Frameworks/JavaVM.framework/Home/../Libraries/libserver.dylib”

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM