如何为 monit 中使用的 C 程序创建 pid 文件,以及如何使用 monit 监控该 C 程序?
答案1
替代解决方案:不要使用 monit。正确编写守护进程是难的,根据我的经验,使用一个进程管理系统来为你做守护进程要容易得多(我喜欢守护进程工具—— 它不是唯一的选择,但我已尝试过所有方法,并且一直使用 daemontools)。这样做有很多好处:
- 守护进程很难:适当地守护进程是指难的(不是“多线程”很难,但至少“前 20 次你会犯下严重错误”很难)。既然别人已经为你完成了这件事,为什么还要浪费时间编写(并频繁调试)没有增加商业价值的代码呢?
- PID 文件很糟糕:它们很危险(在一段时间内,进程正在运行但 PID 文件没有运行),不能保证准确性(当您的守护进程死亡并且另一个进程获取其 PID 时,事情就会变得更加复杂),并且它们需要文件系统访问权限(可能是您不想让非特权程序访问的地方)。
- 这不是监控:我花了 8 个月的时间被 monit 及其众多的怪异、设计缺陷、错误和各种疯狂的东西搞得头昏脑胀。我宁愿辞职也不愿再使用 monit —— 我对此深有体会。
答案2
我认为 Monit 仍然是一个有用的工具。没有太多可靠的替代品。
至于 C 程序,你应该仔细研究一下守护进程。这是正确的方法。Monit 能够监控进程名称模式而不是 PID 文件。在紧急情况下,您可以设置如下所示的 Monit,假设程序名称为“c_program”并且有一个实例:
check process c_program
matching "c_program"
start program = "/path/to/c_program"
stop program = "killall c_program"