有没有一种方法可以用php知道cronjob是否已经存在?
我希望它能在大多数主机上运行,甚至是共享主机。
不行,在PHP中没有这样的直接权限。
但是(在专用服务器上),您可以编写一个PHP脚本来读取 /etc/crontab
文件并解析信息以检查服务器上是否存在特定的cron。
crontab -l
命令,这应该可以从PHP中运行。你可能需要限定完整的路径,例如/usr/bin/crontab -l
,这将取决于主机。crontab -l -u otheruser
。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 -');
}
使用shell_exec()
或system()
或类似的东西可能解决问题。
但是在打开safe_mode
时不起作用。
我认为共享主机不会启用这些功能。
@Nathan:难道/usr/bin/crontab -l
不会返回运行脚本的用户的crontab吗?例如www-data、wwwrun、apache或其他什么?