排队等候10次

这种触及另一个职位,但不同,所以我把它作为一个新的问题。

我有一个脚本运行,可能需要超过1分钟的时间来处理,而我的cron设置为每分钟运行一次。 如果第一个没有在文件中使用flock(php),我可以停止执行脚本的另一个cron作业,但是,这意味着我将失去一个迭代例程,必须等待将近一分钟再次触发(正如我的理解让我相信)。

我想要做的是如果脚本被locking,不会被炸出来,而是等待。 然而随着时间的推移,这可能会变得相当高,所以我也想限制排队的cron的数量为10。

我是一个真正的Linux新手(有一个Linux VPS 3天现在),所以我不知道我的解决scheme是否是实用的。

谢谢。

我会说,每个作业都可以创build一个锁文件,并等待最新的现有锁文件。 如果locking文件的数量是10,则退出而不是创build并等待。

为什么一次跑步错过了呢? 在这一点上,我认为你需要超越一个cron工作和一个脚本。

你在这里遇到一个编程问题。 你可以每次运行脚本,如果它决定等待,读取一个文本文件中的计数器,然后在等待时递增,然后在最后运行时递减。 如果计数器读数超过10,那么你刚刚退出。 但是现在你必须确保没有任何事情可以同时读写计数器。

在这一点上,为什么不把它写成一个守护进程,以便它可以实际跟踪自己的状态? 你甚至可以把它写成一个服务器和客户端。

正如其他人指出的那样,cron在这里并不是正确的工具。

需要注意的是:*必须确保在退出或重新启动服务器时清除它们。 如果进程被终止并且locking文件被保留,则可能会遇到永远不会运行的情况,因为有10个过时的locking文件。 *使用特定于locking文件的程序或使用目录。 如果目录存在,mkdir将会出错,触摸将总是返回成功,并且你打开一个竞争条件。

什么是1或10的排队,一旦你开始排队,它不像你的cronjob会突然加速,排队的事情就会比以前less。

我会说植绒,检查是好的;如果你真的想要这样做,你可以实现自己的locking机制,并排队进程,只要他们从一些小于10的文件读取什么的。

像cronjob醒来; 检查/ tmp / count是否存在,如果不是echo 1> / tmp / count,如果它存在/ tmp / count中的数值增量值; 当cronjob脚本完成时,如果文件从1递减到0删除文件,则递减/ tmp / count值; 当您达到文件数10时,只需退出脚本即可。

我会在这里跳过cron。 只是监视所有的文件,并根据需要不locking时使用它们。 这可能吗?

你可以使用一个名为胖控制器的程序。 它像CRON一样工作,不过每隔一分钟或几秒就要运行一次脚本,而不是每运行一分钟或几秒钟,重要的是从脚本结束之后等待几分钟或几秒钟,然后重新启动脚本。

它还具有其他function,如:

  • 并行运行多个脚本实例
  • 可以立即重新启动一个脚本(即不要等),如果脚本如此说的话
  • 如果脚本错误可以暂停

看看网站:www.4pmp.com/fatcontroller/

有更多的信息和用例。