Linux 中的 cronjob 与守护进程。什么时候使用?

将进程妖魔化有一些好处,因为它与终端分离。但是同样的事情也可以通过 cron 作业来实现。[如果没有,请纠正我]

当使用 cronjob 或 daemon 进程时,我可以区分不同场景的最佳需求是什么?

24088 次浏览

Cronjob 和守护进程之间的区别在于执行时间框架。

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

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

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

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

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

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

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

通常,如果您的任务需要每小时运行几次以上(可能小于10分钟) ,那么您可能需要运行一个守护进程。

一个总是在运行的守护进程有以下好处:

  • 它可以以大于每分钟1个的频率运行
  • 它可以更容易地记住以前运行的状态,这使得编程更简单(如果需要记住状态) ,并且在某些情况下可以提高效率
  • 在拥有许多主机的基础设施上,它不会造成“蜂拥而至”的效应
  • 可以更容易地避免多个调用(也许?)

但是

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

一般来说,健壮性支持“ cron”,性能支持守护进程。但是有很多重叠的地方(任何一个都可以)和反例。这取决于你的具体情况。