如何检查cronjob是否存在与PHP?

有没有办法知道一个cronjob已经存在与PHP?

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

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

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

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

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

使用shell_exec()system()或类似的东西可以解决这个问题。 但是它不会在打开safe_mode工作。

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

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

除了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 -'); }