【问题标题】:How to make a daemon which will accept arbitrary commands [closed]如何制作一个接受任意命令的守护进程[关闭]
【发布时间】:2010-12-21 23:33:23
【问题描述】:

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

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

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

【问题讨论】:

  • 不确定为什么关闭。我似乎很清楚:@Jono 想要将现有的命令行驱动程序转换为可以在后台运行并且仍然可以从某个地方读取命令的程序。
  • 我也不知道为什么关闭了。这里有很多很好的建议。无论如何,谢谢。
  • 自从关闭以来,我无法回答我最终所做的事情。我把它缩小到 DBUS、Java RMI 和 Java Sockets。我决定使用 Java Sockets,因为它似乎是最轻量级且独立于平台的。谢谢大家的建议。

标签: java linux daemon


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    远程登录? ssh?

    在客户端:ssh user@server command

    【讨论】:

    • ...你是怎么想到这个的?
    • 他可能读过man 1 ssh ...
    • @Stephen:that 与用 Java 编写守护进程有什么关系?
    • 当我发布我的答案时,Java 什么都没有,他可以在 java 中编写一个 ssh/telent 服务器/客户端。
    • @Ignacio - 批评某人诚实地试图回答一个糟糕的问题是不好的形式,IMO。至少有 5 名高级代表认为这是无法回答的……
    【解决方案3】:

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

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

    编辑 2:要将其置于后台,您可以在 Bash 中执行通常的 program &。如果你想让它自己在后台运行,那么你可以在 Linux 上使用daemon 函数。

    【讨论】:

      【解决方案4】:

      使用 xinetd。

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

      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 访问权限。

      【讨论】:

        猜你喜欢
        • 2011-07-20
        • 2015-07-20
        • 2015-11-09
        • 2010-11-13
        • 2011-05-09
        • 2016-02-07
        • 1970-01-01
        • 1970-01-01
        • 2014-07-25
        相关资源
        最近更新 更多