繁体   English   中英

Cron中同时运行多个PHP脚本

[英]Multiple PHP scripts run at same time in Cron

我有一个crontab,如下所示

* 22 * * * php /var/www/domain1/cron.php
* 22 * * * php /var/www/domain2/cron.php
* 22 * * * php /var/www/domain3/cron.php
* 22 * * * php /var/www/domain4/cron.php
...

但是,上面显示的脚本似乎弄乱了,每次运行多达100次! 我不确定为什么会这样,但是由于它们都准备在同一时间启动,因此我将尝试更改此设置。 应该说,如果我手动运行每个cron文件,我看不到任何此类行为并获得预期的行为。

我能以某种方式让cron一次只运行一行吗? 这样,当domain1 / cron.php运行时,它将不会在domain1 / cron.php完成之前运行domain2 / cron.php吗?

我不能为他们更改时间,因为我不确定每个完成的时间。 在一个域上可能需要3秒,而在另一个域上可能需要30分钟。

将它们全部放在一个命令行中,因此它们将按顺序运行。

* 22 * * * php /var/www/domain1/cron.php; php /var/www/domain2/cron.php; php /var/www/domain3/cron.php; php /var/www/domain4/cron.php

但是,由于此cron作业在22小时内每分钟运行一次,因此,如果花费超过一分钟,您仍然会出现重叠。

如果您具有root权限,则可以尝试这种方式。

* 22 * * * /root/sbin/allDomainsCron.sh

在allDomainsCron.sh包含您的域cron.php的一个一个的地方:

#!bin/bash
php /var/www/domain1/cron.php
php /var/www/domain2/cron.php
php /var/www/domain3/cron.php
php /var/www/domain4/cron.php
...

因此,您可以确保一次只运行一个cron.php。

如果您每天在22:00运行一次脚本,则此代码可以完成工作:

0 22 * * * /root/sbin/allDomainsCron.sh

不可以,crontab不能按顺序执行。 以这种方式使用cron也不可靠。 相反,您可能想要的是一个实际的队列或作业管理器,它可以比crontabs更可靠地有效控制所需作业执行的结果和流程。 您可以为此签出RabbitMQ,ZeroMQ或Gearman之类的东西。 或者,如果您使用的是AWS,则SQS是一个好的开始。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM