使用 ansible lineinfile 匹配文件结尾

使用 ansible lineinfile 匹配文件结尾

我正在尝试在 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 服务器配置通常是一个好的开始。

相关内容