我有一个如下所示的 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 分钟。
如果你有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)
将它们全部放在一个命令行上,这样它们就会按顺序运行。
* 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 小时内每分钟运行一次,因此如果它们花费超过一分钟,您仍然会遇到重叠。