74

使进程被守护进程是有好处的,因为它与终端分离。但同样的事情也可以通过 cron 作业来实现。[如果不是请纠正我]

我可以区分何时使用 cronjob 或守护进程的场景的最佳要求是什么?

4

4 回答 4

62

一般来说,如果您的任务需要每小时运行多次(可能小于 10 分钟),您可能需要运行一个守护程序。

始终运行的守护程序具有以下好处:

  • 它可以以大于每分钟 1 次的频率运行
  • 它可以更轻松地记住之前运行的状态,这使得编程更简单(如果您需要记住状态)并且在某些情况下可以提高效率
  • 在具有许多主机的基础架构上,它不会导致“踩踏羊群”效应
  • 可以更轻松地避免多次调用(也许?)

  • 如果它退出(例如出现错误),除非您实现了该功能,否则它不会自动重新启动
  • 即使没有做任何有用的事情,它也会使用内存
  • 内存泄漏是一个更大的问题。

一般来说,健壮性有利于“cron”,而性能有利于守护进程。但是有很多重叠(其中任何一个都可以)和反例。这取决于您的确切情况。

于 2012-10-19T21:13:36.113 回答
13

cronjob 和守护进程之间的区别在于执行时间范围。

cronjob是一个偶尔执行一次的进程。cronjob 的一个示例可以是偶尔删除临时文件夹内容的脚本,或者每天早上 9 点向一堆设备发送推送通知的程序。

守护进程是一个独立于任何用户运行的进程,但如果它结束则不会重新启动。

于 2012-10-19T13:40:50.317 回答
11

如果您需要一项对其他人永久可用的服务,那么您需要运行一个守护程序。这是一个相当复杂的编程任务,因为守护进程需要能够永久地与世界通信(例如通过侦听套接字或 TCP 端口),并且需要编写它以干净地处理每个作业而不会泄漏或甚至长时间锁定资源。

相比之下,如果您有一个特定的作业,其描述可以提前确定,并且可以在没有进一步信息的情况下自动执行,并且是独立的,那么拥有一个定期运行该任务的 cron 作业可能就足够了. 这设计起来要简单得多,因为您只需要一个在有限时间内运行一次然后退出的程序。

简而言之:守护进程是一个永远运行的单一进程。cron 作业是一种定期启动新的、短暂的进程的机制。

于 2012-10-19T14:47:17.940 回答
1

守护进程可以通过缓存状态、延迟磁盘写入或与客户端进行长时间会话来利用它的寿命。

守护进程还必须没有内存泄漏,因为它们可能会随着时间的推移累积并导致问题。

于 2012-10-19T13:45:32.593 回答