从 php 设置 cron 作业

set cron job from php

我尝试从 php 设置 cron 作业,但每次我尝试代码失败时它都不起作用。 告诉我这段代码有什么问题

    $cron = $this->generator();
    file_put_contents("cron.txt", $cron);
    shell_exec('crontab cron.txt');

生成器函数使 cron 作业字符串如下所示

12 1 * * * /usr/bin/sample >/dev/null 2>&1

cron.txt 文件没问题。它包含字符串,但 shell_exec 有些不起作用

运行 你的带有硬编码 $corn 的脚本在本地对我来说工作正常,我在开始时包含了几行来清除 crontab 并结合行以确认输入。见下文。

$cron = '12 1 * * * /usr/bin/sample >/dev/null 2>&1';

file_put_contents('cron.txt', $cron);

shell_exec('crontab -r');
shell_exec('crontab cron.txt');

// To check the result
$output = []; 
exec('crontab -l',$output);
print_r($output);

输出:

Array
(
    [0] => 12 1 * * * /usr/bin/sample >/dev/null 2>&1
)

这是一种检查 crontab cron.txt 执行结果的方法:

$output = $return = [];
exec('crontab cron.txt',$output, $return);
var_dump($output, $return);

成功时不会有输出,也不会return:

array(0) {
}
int(0)

问题是 apache 服务器将 运行 作为一个单独的有限资源帐户,理所当然地不应创建 cron 作业。这是让主机服务器受到威胁的一种非常简单的方法。特别是如果这是 运行ning 在可公开访问的 IP 地址 space.

但是,如果环境安全并且您的服务器管理员允许,您可以将 apache 进程 运行 作为更高权限的帐户(例如您的帐户)或使用 suexec 功能 运行 作为具有有限但适当权限的指定帐户。

在 Dr Google 中多次搜索后,我找到了答案 我必须将使用更改为 www-data 的 Apache 用户 所以命令更改为 crontab -u www-data cron.txt