linux - 由 init.d 启动的保持事件进程的标准或最佳方式

标签 linux shell daemon startup init.d

<分区>

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

或者更好的是,有没有办法直接从 /etc/init.d 让它保持事件状态?

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

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

我有 2 个问题需要解决:

  1. 有没有一种方法可以实现 从 init.d 中保持某些进程存活 shell 脚本。是标准/最佳做法吗?

  2. 建议使用无限循环使守护进程保持事件状态?我想最好使用诸如守护进程之类的工具来实现它。对吗?

非常感谢您的宝贵时间!

最佳答案

您可能想使用 daemon(3)守护程序代码中的库函数。你应该知道 syslog(3) (至少记录错误情况)。您可能应该轻轻捕捉 SIGTERM 信号。仔细阅读signal(7)

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

阅读Advanced Linux Programming并研究一些现有的自由软件守护进程的源代码。

也许 dbus也与您的目标相关(我不太明白:“查找停机过程”到底是什么意思?您可以使用 setrlimit(2) 设置一些限制,通常通过内置的 ulimit bash 调用一些 .bashrc)

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

关于linux - 由 init.d 启动的保持事件进程的标准或最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24649828/

相关文章:

php - UTF-8贯穿始终

c - 将 STDERR 从服务重定向到系统日志

c - 错误 : storage class specified for parameter

linux - Linux上COM口拦截和数据修改

bash - PIG-如何将Shell命令用于模式文件/文件夹名称

bash - 如何在 bash 中并行运行命令?

shell - 使用 Powershell 脚本调用 Mirth Connect CLI

qt - 编写跨平台 GUI/服务

python - 将python中的键盘输入捕获为Linux中的守护进程

linux - 如何更改 Linux 显示驱动程序中支持的刷新率?