我编译的程序正在通过 init.d 运行,但最终被杀死

我编译的程序正在通过 init.d 运行,但最终被杀死

我制作了一个小型实用程序,用于C监视udev电源事件并自动调整笔记本电脑背光亮度。 (我运行的是 Ubuntu 15.04)

我运行了以下命令,它在启动时运行得很好。

$ sudo cp powermonitor /etc/init.d/powermonitor
$ sudo chmod +x /etc/init.d/powermonitor
$ sudo update-rc.d powermonitor defaults

然而,在监视其 CPU 使用情况htop一段时间后,我注意到它现在消失了。该程序不接受任何命令行参数,尽管 Linux 似乎试图通过以下方式启动它:

/etc/init.d/powermonitor start

我应该做些什么来确保该流程继续运行?

编辑:澄清一下,powermonitor是可执行文件而不是脚本。

答案1

中的文件/etc/init.d不应被编译为可执行文件。您可能将编译后的可执行文件放在其他地方/usr/local/bin;然后你写一个初始化脚本in /etc/init.d,它知道如何启动和停止已编译的程序。通常这很简单,只需在后台运行它来启动,然后杀死它的 PID(或使用 的可执行文件名称killall)来停止。init将使用单个参数调用 init 脚本,即单词start, stop, restart&c.;脚本有责任了解如何运行服务本身。

如需快速介绍,请尝试这里。您的目录中可能有一个示例骨架脚本/etc/init.d,您可以对其进行更改以适合您的情况。

顺便说一句,您正在运行什么发行版?许多现代发行版现在运行systemd而不是sysvinit使用(默认情况下)声明性单元文件而不是初始化脚本; IMO 单元文件更容易编写。 systemd 提供了 sysvinit 兼容模式,因此您可以自己运行它。如果是这样,我建议编写一个单元文件而不是脚本。

相关内容