如何检查PHP是否存在crontab?

时间:2011-02-07 20:36:05

标签: php linux cron crontab

有没有办法知道cronjob是否已经存在于php?

我希望它可以在大多数托管上工作,甚至可以共享。

4 个答案:

答案 0 :(得分:11)

,PHP中没有这样的直接权限。

但是(在专用服务器上),您可以编写一个PHP脚本来读取/etc/crontab文件并解析该信息以检查服务器上是否存在特定的cron。

答案 1 :(得分:3)

您可以尝试运行crontab -l命令,该命令应该可以在PHP中运行。您可能必须限定完整路径,例如/usr/bin/crontab -l,这取决于主机。

这将返回运行命令的用户的crontab条目,如果PHP页面和cron作业以同一用户身份运行,那么这就是你想要的(许多共享主机最近使用setuid php脚本)。要获取其他用户的crontab条目,您需要在大多数系统上拥有超级用户权限,并crontab -l -u otheruser

答案 2 :(得分:1)

使用shell_exec()system()或其他可能解决问题。 但是,如果safe_mode已启用,则无效。

我认为共享主机不会启用这些功能。

@Nathan:不会/usr/bin/crontab -l为运行脚本的用户返回crontab吗?例如www-data,wwwrun,apache还是什么?

答案 3 :(得分:1)

除了内森的回答:

如果您可以运行exec()crontab命令

function cronjob_exists($command){

    $cronjob_exists=false;

    exec('crontab -l', $crontab);

    if(isset($crontab)&&is_array($crontab)){

        $crontab = array_flip($crontab);

        if(isset($crontab[$command])){

            $cronjob_exists=true;

        }

    }

    return $cronjob_exists;
}

$command = '30 9 * * * '.__DIR__.'/cronjobs/job1.php';

if(cronjob_exists($command)===FALSE){

    //add job to crontab
    exec('echo -e "`crontab -l`\n'.$command.'" | crontab -');

}