Cron 中同时运行多个 PHP 脚本

Dan*_*sen 4 php 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
...
Run Code Online (Sandbox Code Playgroud)

然而,上面显示的脚本似乎很混乱,并且每个脚本都运行了一百次!我不确定为什么会发生这种情况,但由于它们都设置为同时启动,我会尝试改变这一点。应该说,如果我手动运行每个 cron 文件,我看不到这样的行为并得到预期的行为。

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

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

sze*_*alu 7

如果你有root权限的话可以试试这个方法。

* 22 * * * /root/sbin/allDomainsCron.sh
Run Code Online (Sandbox Code Playgroud)

其中 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
...
Run Code Online (Sandbox Code Playgroud)

这样你就可以确保一次只运行一个 cron.php。

如果您每天 22:00 运行该脚本一次,则以下代码将完成这项工作:

0 22 * * * /root/sbin/allDomainsCron.sh
Run Code Online (Sandbox Code Playgroud)


Bar*_*mar 5

将它们全部放在一个命令行上,这样它们就会按顺序运行。

* 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
Run Code Online (Sandbox Code Playgroud)

但由于这个 cron 作业在 22 小时内每分钟运行一次,因此如果它们花费超过一分钟,您仍然会遇到重叠。