使用PHP删除单个cron作业


To Delete single cron job using PHP

我正在使用php命令设置cron作业

<?php
   echo exec('echo -e "`crontab -l`'n* * * * *  /usr/local/bin/curl path" | crontab -');
?>

上面的命令将添加cronjob,但我想删除给定路径的特定cronjob所以我已经尝试了

<?php
 echo exec('echo -e "`crontab -r`'n1 * * * *  /usr/local/bin/curl path" | crontab -');
 ?>

但它是删除所有带有电子邮件id的cronjobs。有什么方法可以删除特定的cronjob吗?

正如您所发现的,crontab -r会删除所有cron作业,要删除一个cron选项卡,类似这样的操作可能会奏效:

<?php
// php is weird sometimes
// the output is an array split on new lines
exec('crontab -l', $data);
// this is the one you are replacing
$val = '*/30 * * * * /path/to/awstats.pl -update -config=myconfig';
// find it in the array
$key = array_search($del_val, $data);
// key is false if not found
if($key !== false){
  unset($data[$key]);
}
// put the data back into the crontab
exec ('echo "'.implode("'n", $data).'" | crontab -');
$match = 'yourpath';
exec('crontab -l 2>&1 | grep -v '.$match.' |  sort - | crontab -');

这将列出crontab,匹配所有内容(除了要删除的行),然后将此匹配通过管道返回以创建新的crontab。