我正在尝试编写一个有助于删除 cron 作业的函数,我已经从网上尝试了一些类,但它不起作用,所以我自己编写它,问题是它没有正确删除命令,它要么删除它,要么删除文件中存在的每个 cron 作业的一半!
这是我的函数:
function delete_cronjob($command)
{
$outputs = array();
exec('crontab -l',$outputs);
for($i=0;$i<count($outputs);$i++)
{
if ($outputs[$i]==$command)
$outputs[$i]=NULL;
}
shell_exec('crontab -r');
for($i=0;$i<count($outputs);$i++)
{
if ($outputs[$i]!=NULL)
shell_exec('(crontab -l ; echo "'.$outputs[$i].'") |uniq - | crontab -');
}
}
这是我使用的那种 cron 作业:
$command='0 0 * * * ssh -p 22 root@192.168.0.121 "cd /home/sally/;./bckp_rstr.bash _ _ 0 1 test root@192.168.0.196:/home/sally/sal_bckp/ 192.168.0.121 22 1 "';
delete_cronjob($command);
怎么了?
如果它像在我的系统(Fedora)上一样在您的系统上工作,我建议只使用file_put_contents,更不用说出错了
此外,我将cron作业存储在数据库中,因此我可以将它们标记为活动/非活动状态,然后转储出活动作业 - 以及一个用于注释/描述其功能的字段
它的缺点是覆盖任何手动编辑的crons,但我不倾向于这样做。拥有可供我们所有服务器访问的 crons 存储的优势 - 有一个字段说明 crons 适用于哪个服务器 - 胜过这一点。这也意味着crons列表与其余数据一起备份,如果需要:),可以很容易地推送到其他机器值得考虑。