进一步阅读

进一步阅读

创建了一个可执行文件并计划将其用作服务。

当使用 upstart 在 Ubuntu 12.04 或 14.04 上运行时,它运行良好。

但是,在 Ubuntu 15.04(带有 systemd)上,此命令不会终止:

systemctl start mySrv01

可能是因为我没有关闭 stdin?upstart 似乎不介意。有什么想法吗?谢谢。

答案1

使用 upstart 时不需要这样做,不知道为什么。

您也不必使用 systemd 执行此操作。您的就绪协议不匹配。您的服务单元文件表明您的程序采用了Type=forking就绪协议。但您的程序本身实际上并未采用。

准备forking就绪协议很难正确执行,但很容易出错。几乎没有任何程序真正使用它。Type=simple如果一开始就已是服务单元,只需创建服务单元即可。

此外,你不需要费尽心思尝试通过关闭打开的文件描述符等操作来实现“守护进程化”。你的程序已经是恶魔化了

进一步阅读

答案2

事实证明,对于 systemd 来说,守护进程 mySrv01 必须分叉一个子进程,并且最好关闭 stdin。

使用 upstart 时不需要这样做,不知道为什么。

相关内容