运行 PHP 通过 cronjob 编写脚本并避免重复 PHP 进程(flock)
Run PHP Script via cronjob and avoid duplicate PHP process (flock)
我一直在阅读有关如何 运行 定时任务并避免重复执行定时任务的信息。意思是,如果 cronjob 已经 运行ning,不要 运行 它的另一个实例。如果 cronjob 未 运行ning,则根据 cronjob 计划再次启动 运行ning 进程。
flock()
是这样做的解决方案,如此处所述: 使用 flock 设置 cronjob 的方法如下:
* * * * * flock -n /tmp/script.lockfile /usr/local/bin/script
但是,当我尝试使用 flock 在 cronjob 中设置我的 PHP 脚本时,它不起作用。我设置如下:
*/10 * * * * flock -n /tmp/my-script.lockfile cd /var/www/html/wp-content/plugins/my-plugin/; php my-script.php
我尝试直接在控制台中测试它,不使用 cronjob,虽然它创建了 my-script.lockfile
文件,但它没有 运行 my-script.php
脚本。错误说:
flock: 无法执行 cd: 没有那个文件或目录
无法打开输入文件:my-script.php
这里有我遗漏的东西吗? flock()
是否仅适用于 .sh
脚本?如果是这样,我如何调整我的 PHP 脚本以与 flock()
一起工作?
看起来如果你想使用更复杂的命令,你必须在它前面加上 -c
并包装在 "
.
*/10 * * * * flock -n /tmp/my-script.lockfile -c "cd /var/www/html/wp-content/plugins/my-plugin/; php my-script.php"
我一直在阅读有关如何 运行 定时任务并避免重复执行定时任务的信息。意思是,如果 cronjob 已经 运行ning,不要 运行 它的另一个实例。如果 cronjob 未 运行ning,则根据 cronjob 计划再次启动 运行ning 进程。
flock()
是这样做的解决方案,如此处所述: 使用 flock 设置 cronjob 的方法如下:
* * * * * flock -n /tmp/script.lockfile /usr/local/bin/script
但是,当我尝试使用 flock 在 cronjob 中设置我的 PHP 脚本时,它不起作用。我设置如下:
*/10 * * * * flock -n /tmp/my-script.lockfile cd /var/www/html/wp-content/plugins/my-plugin/; php my-script.php
我尝试直接在控制台中测试它,不使用 cronjob,虽然它创建了 my-script.lockfile
文件,但它没有 运行 my-script.php
脚本。错误说:
flock: 无法执行 cd: 没有那个文件或目录 无法打开输入文件:my-script.php
这里有我遗漏的东西吗? flock()
是否仅适用于 .sh
脚本?如果是这样,我如何调整我的 PHP 脚本以与 flock()
一起工作?
看起来如果你想使用更复杂的命令,你必须在它前面加上 -c
并包装在 "
.
*/10 * * * * flock -n /tmp/my-script.lockfile -c "cd /var/www/html/wp-content/plugins/my-plugin/; php my-script.php"