我正在寻找一种标准的方法或最佳做法来保持由init.d
shell脚本启动的守护进程。
或者甚至更好,有没有办法让它直接从/etc/init.d
生效?
具体来说,我有一个名为dtnd
的守护进程,其中有无限循环查找进程,如果有,守护进程再次唤醒它们。此外,我使用start-stop-daemon
工具,以便从给定的系统用户运行进程。
我想从启动时运行这个dtnd
守护进程。为了实现这种行为,我创建了一个init.d脚本,它使用start,stop和status命令“包装”dtnd
文件。
我有两个问题需要解决:
有没有办法实现从init.d shell脚本中保留一些进程。是标准/最佳方式吗?
建议让守护进程保持无限循环?我想最好使用守护进程之类的工具来实现这一目标。这是对的吗?
非常感谢您的时间!
答案 0 :(得分:2)
您可能希望在守护程序的代码中使用daemon(3)库函数。您应该知道syslog(3)(至少记录错误条件)。你可能应该轻轻地抓住SIGTERM
信号。仔细阅读signal(7)
服务器程序通常基于event loop(概念上是无限循环)。您将使用现有的事件循环库(例如libev,libevent,glib,...)或围绕多路复用系统调用构建您自己的事件循环库,如poll(2) < / p>
阅读Advanced Linux Programming并研究一些现有免费软件守护程序的源代码。
也许dbus也与你的目标相关(我并不真正理解:“寻找失败过程”究竟意味着什么?你可以设置一些限制setrlimit(2)通常通过ulimit
bash内置于某些.bashrc
)
crontab(5)还有@reboot
条目,但这不是系统守护程序的推荐做法(但您可以在用户crontab文件中使用它)。