有时我想自动将配置添加到我以后可以自行删除的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,你知道存储库中最新的东西与文件系统上的实时配置文件相同:
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。