脚本来修改logrotateconfiguration文件?

我正在寻找一个脚本,这将允许我以编程方式修改logrotateconfiguration文件。 至less我希望能够replace一个块,如

/var/log/wtmp { missingok monthly create 0664 root utmp rotate 1 } 

与一个新的命令行或通过stdin或通过文件(我不关心哪个)给出的块。 它必须能够在任意configuration文件上运行。

我真的很喜欢它,如果它理解了足够的configuration,我可以这样说

 logrotateupdate /etc/logrotate.conf /var/log/wtmp weekly 

并做它正确的事情(删除每月并在上面的例子中每周更换)。

这可能是别人通常所知道的,但这是我从未见过的。

我的系统是Linux(Ubuntu)。

Augeas是这个工具,但它有一个相当陡峭的学习曲线。 下面是如何设置/var/log/wtmp来每周轮换(为简洁起见,修改了一些/etc/logrotate.conf ):

 [root@dev ~]# cat /etc/logrotate.conf # trimmed # no packages own wtmp -- we'll rotate them here /var/log/wtmp { monthly minsize 1M create 0664 root utmp rotate 1 } [root@dev ~]# (echo "set \ /files/etc/logrotate.conf/rule[file='/var/log/wtmp']/schedule weekly"; \ echo save) | augtool Saved 1 file(s) [root@dev ~]# cat /etc/logrotate.conf # trimmed # no packages own wtmp -- we'll rotate them here /var/log/wtmp { weekly minsize 1M create 0664 root utmp rotate 1 } 

对于许多configuration文件来说,镜头(如文件结构的描述是已知的)。 一旦你掌握了所有的工作原理,写出新镜头并不难。

Augeas也很好地与Puppetbuild立了一个非常强大的configurationpipe理系统。

除了markdrayton的回答之外,我还补充说,Augeas现在可以用作解释器,所以你可以用下面的内容写一个可执行的脚本:

 #!/usr/bin/augtool -f set /files/etc/logrotate.conf/rule[file='/var/log/wtmp']/schedule weekly save 

并执行它。 你甚至可以使用自动保存选项( -s )缩短它:

 #!/usr/bin/augtool -sf set /files/etc/logrotate.conf/rule[file='/var/log/wtmp']/schedule weekly