如何制作一个可以接受任意命令的守护进程

时间:2010-12-21 23:33:23

标签: java linux daemon

现在该程序可以在linux终端上启动。一旦运行,您可以键入各种命令,程序将在机器上执行操作,直到用户退出。

我想将程序变成用户运行的服务,然后转到后台。然后用户应该能够向它发出命令。就像开始和停止一样,写一些东西到日志和我的程序所做的其他事情。请注意,我需要发送我的程序将处理的任意命令,而不仅仅是启动和停止。也许这意味着它不再是一个守护进程 - 我不知道。我该怎么做?

此外,如果这不是太难,我希望能够运行此服务的多个实例。但这不是必需的。

4 个答案:

答案 0 :(得分:2)

为守护程序使用更复杂的命令通道,例如D-Bus或JSON-RPC,然后编写一个帮助程序,将在命令行传递给它的参数转换为D-Bus或JSON-RPC调用,然后显示返回的对象/结果。

答案 1 :(得分:1)

听起来你想要一个named pipe。用户可以将命令写入管道,并且您的守护程序可以从中读取。

编辑:如果您的程序已经从标准输入读取,那么您甚至不需要更改它。请参阅链接的维基百科文章中的gzip示例。

编辑2:要将其置于后台,您可以在Bash中执行常规program &。如果您希望将它放在后台,那么您可以在Linux上使用daemon函数。

答案 2 :(得分:1)

的Telnet? SSH?

客户端上的

ssh user@server command

答案 3 :(得分:1)

使用xinetd。

安装xinetd,并在/etc/xinetd.d中放置一个服务文件。 (ubuntu / debian here) 例如:

service yourprogram
{
     disable = no
     socket_type = stream
     protocol = tcp
     wait = no
     user = root
     server = /usr/local/yourprogram/executable
}

然后,编辑/ etc / services并添加:

    yourprogram  1339/tcp

如果人们连接到端口1339,他们会得到一个在服务器行定义的该程序的新实例。

但是,要小心,因为它以root身份运行!确保您拥有良好的防火墙或对用户进行身份验证的方式,因为如果您的程序存在错误,您将在计算机上授予每个人root权限。