我总是想知道谁应该这样做。在Ruby中,我们有Daemons库,它允许 Ruby 脚本自己守护进程。然后,查看God(一个进程监控工具,类似于monit)页面,我看到 God 可以守护进程。
有没有明确的答案?
您可能无法得到明确的答案,因为我们通常会同时得到这两种情况:进程能够自行守护进程,而进程监视器能够守护其子进程。
就个人而言,我更喜欢让进程监视器或脚本来执行它,原因如下:
1. 如果进程监视器希望密切关注其子进程以在它们死后重新启动它们,它可以选择不守护它们。当其子进程之一退出时,将向监视器传递 SIGCHLD。在嵌入式系统中,我们经常这样做。
2. 通常在守护进程时,您还设置了 euid 和 egid。我不喜欢在每个子进程中编码系统级策略的知识,比如要使用的 uid。
3. 它允许重复使用相同的应用程序作为命令行工具或守护程序(我坦率地承认这在实践中很少发生)。
我会说最好让你的脚本来做。我不知道您那里的过程监控工具,但我认为用户可能会使用替代工具,这意味着让脚本执行它会更好。
如果您可以设想脚本以非守护程序方式运行,我会在脚本中添加一个选项来启用或禁用守护程序。