在linux中cronjob vs守护进程。 何时使用?
由于它从terminal分离,所以有一些优点使得一个进程被守护进程。 但同样的事情也可以通过cron工作来实现。 [请不要纠正我]
当我使用cronjob或daemon进程时,我可以区分哪些场景的最佳要求是什么?
一般来说,如果你的任务需要每小时运行几次(可能<10分钟),你可能需要运行一个守护进程。
守护进程总是运行,有以下好处:
- 它可以以大于每分钟1次的频率运行
- 它可以更容易地记住以前的运行状态,这使得编程更简单(如果需要记住状态),并且可以提高某些情况下的效率
- 在拥有多台主机的基础设施上,不会造成“踩踏式”的效应
- 可以更轻松地避免多个调用(也许?)
但
- 如果退出(例如发生错误),除非您实现该function,否则不会自动重新启动
- 即使没有做任何有用的事,它也会使用内存
- 内存泄漏更是一个问题。
一般来说,鲁棒性有利于“cron”,而性能则有利于守护进程。 但是有很多重叠(哪一个都可以)和反例。 这取决于你的确切场景。
cronjob和守护进程之间的区别是执行时间框架。
cronjob是一段时间执行一次的过程。 cronjob的例子可能是一段时间内删除临时文件夹的内容的脚本,或者是每天早上9点向一堆设备发送推送通知的程序。
而守护进程是一个运行从任何用户分离的进程,但不会重新启动,如果它结束。
如果你需要一个永久可用的服务,那么你需要运行一个守护进程。 这是一个相当复杂的编程任务,因为守护进程需要能够永久地与世界进行通信(例如,通过侦听套接字或TCP端口),并且需要编写它来干净地处理每个作业而不泄漏或甚至长期locking资源。
相比之下,如果你有一个特定的工作,其描述可以预先做好足够的准备,并且可以在没有进一步信息的情况下自动执行,而且是独立的,那么定期执行定期任务可能是完全足够的。 这样devise起来就简单多了,因为你只需要一个在有限时间内运行一次然后退出的程序。
简而言之:守护进程是一个永远运行的单一进程。 定期任务是定期启动一个新的,短暂的过程的机制。
守护进程可以通过caching状态,推迟磁盘写入或者与客户端进行长时间的会话来利用它的寿命。
一个守护进程也必须没有内存泄漏,因为它们可能会随着时间的推移积累并引发问题。