保持活动进程的标准或最佳方法由init.d启动

时间:2014-07-09 09:21:44

标签: linux shell daemon startup init.d

我正在寻找一种标准的方法或最佳做法来保持由init.d shell脚本启动的守护进程。

或者甚至更好,有没有办法让它直接从/etc/init.d生效?

具体来说,我有一个名为dtnd的守护进程,其中有无限循环查找进程,如果有,守护进程再次唤醒它们。此外,我使用start-stop-daemon工具,以便从给定的系统用户运行进程。

我想从启动时运行这个dtnd守护进程。为了实现这种行为,我创建了一个init.d脚本,它使用start,stop和status命令“包装”dtnd文件。

我有两个问题需要解决:

  1. 有没有办法实现从init.d shell脚本中保留一些进程。是标准/最佳方式吗?

  2. 建议让守护进程保持无限循环?我想最好使用守护进程之类的工具来实现这一目标。这是对的吗?

  3. 非常感谢您的时间!

1 个答案:

答案 0 :(得分:2)

您可能希望在守护程序的代码中使用daemon(3)库函数。您应该知道syslog(3)(至少记录错误条件)。你可能应该轻轻地抓住SIGTERM信号。仔细阅读signal(7)

服务器程序通常基于event loop(概念上是无限循环)。您将使用现有的事件循环库(例如libevlibeventglib,...)或围绕多路复用系统调用构建您自己的事件循环库,如poll(2) < / p>

阅读Advanced Linux Programming并研究一些现有免费软件守护程序的源代码。

也许dbus也与你的目标相关(我并不真正理解:“寻找失败过程”究竟意味着什么?你可以设置一些限制setrlimit(2)通常通过ulimit bash内置于某些.bashrc

crontab(5)还有@reboot条目,但这不是系统守护程序的推荐做法(但您可以在用户crontab文件中使用它)。