gpt4 book ai didi

java - 更简单的 Java 守护程序初始化脚本?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:11:26 25 4
gpt4 key购买 nike

我用 Java 编写了一个用于创建服务/守护进程的小型库。这个想法很简单。当您启动您的应用程序时,您传递一个命令和一个端口号。如果该命令是启动命令,您的应用程序的新实例将在指定端口上启动。否则,该命令将发送到可能在该端口上运行的任何实例。

简而言之,该库提供了一个启动守护进程 Controller 线程的守护进程方法。它使用套接字让您的应用程序与其自身的实例通信(正如您可能已经知道的那样)。

为清楚起见,下面是您将如何使用它的示例:

public class MyApp extends Daemon
{
public static void main(String[] args)
{
if (daemonize(MyApp.class, args))
{
// normal main body
startMyServerOrWhatever();
}
else
{
// failed to start or send command to daemon
// probably wrong syntax or unknown command
printUsageInfoAndExit();
}
}

@Command(start = true)
public static int start()
{
// executed on "start" command, e.g. java -jar MyApp.jar start 8899
doSomeInitializing();
return 0; // return 0 or void to detach from console
}

@Command
public static void mycmd()
{
// executed on "mycmd" command, i.e. java -jar MyApp.jar mycmd 8899
doSomethingCool();
}

@Command(stop = true)
public static int stop()
{
// executed on "stop" command, i.e. java -jar MyApp.jar stop 8899
doSomeCleanup();
return 0; // used as application exit code
}
}

这个库工作得非常好,我用它创建了几个将在 Linux 服务器上运行的守护进程。现在缺少的是一些脚本,让管理员可以像控制服务器上的其他守护进程一样控制这些守护进程(例如,在启动时启动)。

不幸的是,我的 *nix 技能,尤其是在脚本编写方面,并不是顶级水平。我对 BSD 风格的初始化过程 (rc.d) 有基本的了解,但查看示例脚本,如 this one我有点失落。

所以我的问题是,对于我来说,是否有更简单的方法?我的意思是,我的守护进程已经理解这些命令并且它们自己应该对任何操作负责(除非守护进程没有响应停止 - 它应该在超时后被杀死)。

最佳答案

你真的应该看看 tanuki 软件的 java 服务包装器。
参见 http://wrapper.tanukisoftware.com/

我喜欢他们的方法的一点是,他们使用单一工具和通用脚本实现了标准化守护进程和 Windows 服务进程。

我注意到这个工具在一些知名项目(例如 nexus、servicemix 等)中得到了很好的采用。

而当我遇到一个项目采用了Java Service Wrapper来管理deamon进程时,命令集和配置对我来说已经很熟悉了,这降低了学习曲线。

也许您可以将您的套接字 Controller 机制融入这个现有的框架中。

关于java - 更简单的 Java 守护程序初始化脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5229847/

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