简体   繁体   English

使用PHP删除单个cron作业

[英]To Delete single cron job using PHP

I am using a php command to set up a cron job 我正在使用php命令设置cron作业

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

above command will add cronjob but i want to remove particular cronjob of given path so i have tried 上面的命令将添加cronjob,但是我想删除给定路径的特定cronjob,所以我尝试了

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

but it's delete all cronjobs with email id.Is there any way to delete particular cron job? 但是它会删除所有具有电子邮件ID的cronjob。是否有办法删除特定的cron作业?

As you found out, crontab -r removes all cron jobs, to remove one cron tab something like this would probably work: 如您crontab -rcrontab -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 -');

This lists the crontab, matches everything except the line you want deleted, and then pipes this match back in to create a new crontab. 这将列出crontab,匹配您要删除的行以外的所有内容,然后将该匹配项通过管道传输回以创建新的crontab。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM