Linux

以穩健的方式自動維護 linux 配置文件(如 syslog.conf)中的條目

  • August 29, 2010

有時我想自動將配置添加到我以後可以通過腳本刪除的配置文件,例如我想暫時讓 10 台主機登錄到遠端系統日誌伺服器。所以我在腳本中有這樣的東西;

##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 到基於路徑的簽出倉庫中,將送出註釋作為參數。管他呢。

你在svn:///config/有一個配置儲存庫,其中包含etc/syslog.conf,並且你知道儲存庫中的最新內容與文件系統上的實時配置文件相同:

引用自:https://serverfault.com/questions/159046