有时我想自动将配置添加到我以后可以自行删除的conf文件中,例如我想暂时让10个主机登录到远程syslog服务器.所以我在脚本中是这样的;
##some other commands echo "kern.* @syslog.server.local" >> /etc/syslog.conf service syslogd restart
但是我经常更新其他一些命令并再次运行脚本.显然这不是幂等的,我不能重新应用它没有一些grep / delete jiggerpokery,我不能轻易删除它.
所以我采取了这样的做法;
cat <<HEREDOC >>/etc/syslog.conf ###some unique string### echo "kern.* @syslog.server.local" ###end some unique string### HEREDOC
这允许我这样做,使操作可重复…
sed -e 's/###some unique string###(*)###end some unique string###/replacement/g' /tmp/syslog.conf > /tmp/syslog.conf cat <<HEREDOC >>$dfile ###some unique string### echo "kecrn.* @syslog.server.local" ###end some unique string### HEREDOC
然而这一切似乎都有点……
(显然/etc/httpd/conf.d/someconffile.conf安排已解决了新版程序包的问题)
有更简单的方法吗?
我应该注意这种方法的任何警告?
解决方法
我已经使用SVN了.
假使,假设
假使,假设
>你有一个svn存储库为每个主机:http://svn.localnet/thishost/,你想开始对’thishost’上的真实/etc/syslog.conf进行花哨的更改.
>您已经在/ configs /中为此主机配置了本地配置存储库
开始管理此文件的配置
cp /etc/syslog.conf /configs/etc/ svn add /configs/etc/syslog.conf svn commit -m "Managing syslog.conf"
通过脚本进行更改
#echo some stuff into the file.. no need for extra markup/Metadata cp /etc/syslog.conf /configs/etc/ svn commit -m "I added some junk temporarily" service syslogd restart
现在您可以回滚到以前的版本.如果在添加和回滚之间进行了其他永久性更改,则可以使用svn来获取版本之间的差异,并将这些内容合并在一起.
当然,用git或任何你喜欢的代替版本控制.
并且还制作一些永久性脚本以减少出错的可能性,例如bash函数将cp作为基于路径的checkout repo中的文件,将提交注释作为参数.管他呢.
你有一个配置存储库在svn:/// config /包含etc / syslog.conf,你知道存储库中最新的东西与文件系统上的实时配置文件相同: