我正在使用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。有没有办法删除特定的cron作业?
答案 0 :(得分:1)
正如您所发现的,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 -');
答案 1 :(得分:0)
$match = 'yourpath';
exec('crontab -l 2>&1 | grep -v '.$match.' | sort - | crontab -');
这列出了crontab,匹配除了要删除的行之外的所有内容,然后重新管道此匹配以创建新的crontab。