![最简单的无限脚本执行,无需新贵](https://linux22.com/image/665366/%E6%9C%80%E7%AE%80%E5%8D%95%E7%9A%84%E6%97%A0%E9%99%90%E8%84%9A%E6%9C%AC%E6%89%A7%E8%A1%8C%EF%BC%8C%E6%97%A0%E9%9C%80%E6%96%B0%E8%B4%B5.png)
我手头有一台 CentOS 5.11 机器,目前必须使用它——在生产环境中,至少在一段时间内我无法真正将其推送到 CentOS 6。我必须对这个项目的影响很小,不能弄乱这个生产机器。
我有一个脚本,名为 /my/foo。目前,该脚本每 3 分钟从 cron 运行一次 - 它实际上运行如下:
*/3 * * * * /my/foo 我的参数
问题是,脚本通常只需要几秒钟就可以运行,然后我们浪费了将近 3 分钟的等待时间。但是,我们一次只能运行一个实例(因此,如果异常导致运行时间超过 3 分钟,实际上我们已经存在漏洞)。有时脚本可能有很多事情要做,需要 2 分钟,因此我们将其设置为 3 分钟左右。
我们真正想要的是保证这个脚本的一个实例(且只有一个实例)“无限期”(循环)运行,而且最有可能的是,我们会在其中弹出一个“sleep 30”来防止它过于激进。脚本本身不是循环——它是一个一次性脚本。但在 99% 的情况下,我们每 3 分钟从 cron 运行一次,这肯定会浪费大量时间。1% 的情况需要超过 2 分钟,这意味着我们在 99% 的情况下都在等待它可以再次运行并完成更多工作。
因此,我们认为,目前将它放入带有重生的 init 系统中可能是一个不错的方法。在那里,它会运行、完成、重生(脚本本身可能带有一点睡眠)。永远如此。这是有弹性的(意外杀死进程并不意味着它永远死了,等等)。
我已经看到很多关于 upstart 的帖子,甚至还有一些关于它在 CentOS 6 中未来的争论,等等。但是,我现在必须将它放到这个 CentOS 5 盒子上——我们没有 upstart,而且很快也不会有。我必须用我已有的东西将它放到这个生产盒子上……并且不能破坏任何东西。
我见过有人对 /etc/inittab 嗤之以鼻,但也有人指出这是获得重生的最佳方式——/etc/init.d/whatever 链接到 /etc/rc3.d/whatever 等等,这是典型的方式,不提供重生功能。我仍然不确定——似乎是这样的。
考虑到这些限制,将我们的小脚本弹出到 /etc/inittab 本身并重新生成并运行是否最好且合理?
答案1
我将守护脚本/进程并使用以下方式管理它监控。
这将为您提供重生和进程控制,但也允许您在比 cron 更短的间隔内运行/检查进程(例如 15 秒)