2011-02-07 159 views

回答

11

NO,在PHP中没有这样的直接特权。

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

2

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

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

1

使用shell_exec()system()或类似的东西可能解决问题。 但它不会与safe_mode打开。

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

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

+1

是的......我想我假设大多数的共享主机有用户PHP脚本运行setuid为用户,与他们的cron作业相同。我会编辑以澄清我的答案。 – Nathan 2011-02-07 20:55:47

1

除了Nathan的回答:

如果你可以运行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 -'); 

}