从php设置cron作业

时间:2015-06-18 07:03:41

标签: php cron crontab

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

    $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有些无法正常工作

3 个答案:

答案 0 :(得分:1)

使用硬编码的 $ 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);

如果成功,将不会有输出或返回:

array(0) {
}
int(0)

答案 1 :(得分:1)

经过谷歌博士的多次搜索,我发现了答案 我必须将使用更改为Apache用户www-data 所以命令改为crontab -u www-data cron.txt

答案 2 :(得分:0)

问题是apache服务器将作为一个单独的有限资源帐户运行,该帐户不应该创建cron作业。这是让主机服务器受到损害的一种非常简单的方法。特别是如果它在公共可访问的IP地址空间中运行。

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