0

我正在尝试编写一个有助于删除 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);

怎么了 ?

4

1 回答 1

0

如果它在您的系统上像在我的(Fedora)上一样工作,我建议只使用 file_put_contents,更不用说出错了

此外,我将 cron 作业存储在数据库中,因此我可以将它们标记为活动/非活动,然后转储活动的作业 - 以及一个用于评论/描述其作用的字段

它具有覆盖手动编辑的任何 crons 的缺点,但我不倾向于这样做。拥有一个可供我们所有服务器访问的 crons 存储的优势——有一个字段说明 crons 用于哪些服务器——胜过这一点。这也意味着 crons 列表与其余数据一起备份,如果需要,可以很容易地推送到其他机器:) 值得考虑。

于 2013-02-04T09:06:39.747 回答