我已经通过以下方式创建了自己的服务:
- 将我的二进制文件复制到
/usr/bin/mcp
- 创建一个复制骨架的守护进程:
/etc/init.d/skeleton
修改骨架 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
除此以外,骨架完全相同。
然后我创建守护进程:
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
等等。