我正在尝试在 ansible 的 lineinfile 模块中复制以下 sed 代码片段。
sed -i '/# The named pipe \/dev\/xconsole/,$d' /etc/rsyslog.conf
我知道我可以模板化文件或强制匹配行,但我想学习如何使用 ansible 执行匹配到文件末尾的 sed 技巧。我也知道盲目匹配到文件末尾也不是很好的做法。
这是从这篇博客文章中摘录的:https://blog.dantup.com/2016/04/removing-rsyslog-spam-on-raspberry-pi-raspbian-jessie/
目的是修复 rsyslog 中的这个错误:
raspberrypi rsyslogd-2007: action 'action 17' suspended, next retry is Sat Apr 2 01:24:21 2016 [try http://www.rsyslog.com/e/2007 ]
此错误是由配置文件 /etc/rsyslog.conf 末尾的部分引起的
# The named pipe /dev/xconsole is for the `xconsole' utility. To use it,
# you must invoke `xconsole' with the `-file' option:
#
# $ xconsole -file /dev/xconsole [...]
#
# NOTE: adjust the list below, or you'll go crazy if you have a reasonably
# busy site..
#
daemon.*;mail.*;\
news.err;\
*.=debug;*.=info;\
*.=notice;*.=warn |/dev/xconsole
答案1
您的sed
命令会截断文件,而lineinfile
模块“将在文件中搜索一行,并确保该行存在或不存在。这主要在您只想更改文件中的一行时有用”(http://docs.ansible.com/ansible/lineinfile_module.html)。
copy
或者template
听起来仍然是这里最好的选择。
如果您想尝试一下lineinfile
,您的 ssh 服务器配置通常是一个好的开始。