我在 Ubuntu 15.04 上,以 root 身份登录,但是当我运行
ps -ef | grep cron | grep -v grep
为了确保 cron 守护进程正在运行,我看到了选项-f
,这意味着它在前台运行,而不是作为守护进程运行。自从设置它以来,我没有更改任何与 cron 相关的内容(在 DigitalOcean 上,从他们的库存 15.04 映像)。为什么它不能作为守护进程运行?
(是的,我知道我应该使用systemd
。这本来是一个快速而肮脏的解决方案——因为 cron 非常简单和可靠,正确的!?—直到我可以.service
调试并运行我的*文件。)
答案1
因为它正在由 运行systemd
,所以它没有必要将自身分叉到后台,因为它没有被等待它退出(将自身分叉到后台之后)的 shell 脚本调用。
答案2
我看到了
-f
选项,这意味着它在前台运行,而不是作为守护进程运行。
不。这意味着它在启动时没有执行无用的 fork-and-exit 操作。这些操作是(徒劳的)尝试将程序守护进程化,假设人们通过登录到交互式会话并从 shell 运行程序来启动守护进程。这实际上并不可靠和安全地工作,并且是多年来试图以这种方式启动守护进程并令人不快的人们的战争故事的来源。
cron
是已经通过在服务管理器下运行而成为守护进程。它不需要做任何事情来变得守护进程。这样做从毫无意义到对系统的良好运行有害无益。因此,惯例 — — 感谢四分之一世纪以来人们希望在 daemontools、runit、IBM 的 SRC 等下运行守护进程 — — 是使用任何命令行选项来关闭这些小舞蹈。正确的服务管理不需要它们。
进一步阅读
- 乔纳森·德·博因·波拉德(2004年)。设计 Unix 守护程序时应避免的错误. 常见问题答案。
- 格里特·帕普。
cron
运行脚本. 运行脚本的集合。 - 乔纳森·德·博因·波拉德(2015年)。你真的不需要守护进程。真的。 systemd 的恐怖屋。