使用 PHP 手动立即运行 cron 作业

使用 PHP 手动立即运行 cron 作业

我只是想立即手动运行所有 cronjob,以下命令在命令行终端中运行良好,但不适用于shell_exec

crontab -l | grep -v '^#' | cut -f 6- -d ' ' | while read CMD; do eval $CMD; done

有人可以帮我吗,如何将它与 php 合并,我尝试了以下方法但没有成功:

shell_exec('crontab -l | grep -v "^#" | cut -f 6- -d " " | while read CMD; do eval $CMD; done');

还有一件事,我只想触发而不必担心输出和等待。

我也尝试过创建 shell 脚本:cron.sh并尝试过:shell_exec('sh cron.sh'); 仍然没有成功

答案1

我只是想立即手动运行我的所有 cronjob...我只想触发而不必担心输出和等待。

那么为什么不让 cron 去做它该做的事情呢?即在需要的时候运行任务。需要运行并且(就您作为用户而言)“无需担心输出和等待”?

cron 实用程序是一个调度程序,这意味着它运行的任务需要运行定期
为什么您觉得有必要“立即”运行其中任何一个?
是否有任何危险同时多次运行这些进程中的任何一个(尝试为其执行 cron 的工作所面临的风险)?

cron 实用程序在以下安全上下文中运行:用户。PHP
没有。
因此,为了让 PHP有能力的要执行 cron 执行的 [所有] 操作,您必须授予其 root 级权限(通过 sudo)。这是一个坏主意 (TM),除非您非常严格控制你的“提升的 PHP”允许这样做只会给您自己带来维护上的麻烦,因为每当您添加新的 cron 作业时,这种配置就会被破坏。

答案2

您是否在 apache 中使用了这个 php 脚本?在这种情况下,您应该检查 apache 是否有权执行这些 crontab。

也许 $CMD 没有被很好地解析,php 和 bash 对变量使用相同的语法...谁在解释这个?

另外,我建议您使用 exec 函数,这样您就可以使用输出和返回代码进行更多调试。

祝你好运!

相关内容