cronjob vs linux中的守护进程。什么时候用?

时间:2012-10-19 13:39:02

标签: linux

将进程守护进程有一些优势,因为它与终端分离。但同样的事情也可以通过cron工作来实现。 [如果不是,请纠正我]

在使用cronjob或守护程序进程时,我可以区分方案的最佳要求是什么?

4 个答案:

答案 0 :(得分:45)

一般来说,如果你的任务需要每小时运行几次(可能<10分钟),你可能想要运行一个守护进程。

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

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

BUT

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

一般来说,健壮性有利于“cron”,性能有利于守护进程。但是有很多重叠(在哪里都可以)和反例。这取决于您的具体情况。

答案 1 :(得分:11)

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

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

守护程序是一个与任何用户分离的进程,但如果结束则不会重新启动。

答案 2 :(得分:4)

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

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

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

答案 3 :(得分:1)

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

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