当我手动启动自己的服务时,它在前台运行,这是正确的吗?

当我手动启动自己的服务时,它在前台运行,这是正确的吗?

我已经通过以下方式创建了自己的服务:

  1. 将我的二进制文件复制到/usr/bin/mcp
  2. 创建一个复制骨架的守护进程:/etc/init.d/skeleton
  3. 修改骨架 bash 脚本顶部:

    PATH=/sbin:/usr/sbin:/bin:/usr/bin
    DESC="Runs my Service"
    NAME=mcp
    DAEMON=/usr/bin/$NAME
    DAEMON_ARGS="-d f -c /etc/mcp"
    PIDFILE=/var/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME
    

    除此以外,骨架完全相同。

  4. 然后我创建守护进程:

    sudo update-rc.d -f mcp remove
    sudo update-rc.d mcp defaults 97 03
    

当我手动运行该程序时:mcp -d f -c /etc/mcp,它可以工作,但它永远不会返回,因为它是一项始终运行的服务。这是正常的。

但是现在当我将其作为服务启动时:sudo service mcp start,我看到了相同的行为。即,只要我输入启动服务命令,程序就会运行,但现在我的终端卡住了,等待程序。

我认为如果您将某些东西作为服务运行那么它应该在后台运行?

另外,除非我打开第二个终端,否则我无法停止此服务。我希望当我启动服务时,它会在后台的某个地方启动,然后您返回到命令行。我在这里做错了什么吗?

答案1

不要使用init.d服务。而是编写 Upstart 作业。以下是一个例子。Upstart 将负责将程序保持在后台、记录日志等。

您的服务将位于 中/etc/init/mcp.conf,例如包含:

start on runlevel [2345]
stop  on runlevel [016]

exec /usr/bin/mcp -d f -c /etc/mcp

然后你可以这样做:

sudo service mcp start
sudo service mcp stop

等等。

相关内容