如何使用 Ansible 截断现有和打开的文件?
How to truncate an existing and opened file using Ansible?
我喜欢截断或调整由其他应用程序打开和使用的现有文件。例如,随着时间的推移,磁盘可能会被占用大量 space 的日志文件弄得乱七八糟,例如 /var/log/secure
.
简单来说 Linux 相当于
truncate -s 0 /var/log/secure
dd if=/dev/zero of=/var/log/secure bs=1M count=0
echo > /var/log/secure
根据
- How to empty ("truncate") a file on Linux that already exists and is protected in someway?
- How to create a file with a given size in Linux?
- How to create a file with ANY given size in Linux?
并通过 tail -F /var/log/secure
每个都会导致
==> /var/log/secure <==
tail: /var/log/secure: file truncated
tail: /var/log/secure: file truncated
tail: /var/log/secure: file truncated
而不是
==> /var/log/secure <==
tail: ‘/var/log/secure’ has been replaced; following end of new file
经过一些测试,Ansible v2.9 中的所有可用模块(file
、lineinfile
、copy
等)似乎都用新的空文件替换了现有文件,但不会截断或调整大小并导致已经提到的
==> /var/log/secure <==
tail: ‘/var/log/secure’ has been replaced; following end of new file
我知道通过 logrotate
旋转、压缩和删除日志文件可能是更好的解决方案。
似乎 Ansible 问题 #902 没有以那种方式实现。
但是,从 Ansible v3.0.0 开始,随着 filesize
_module,引入了一个围绕 dd
的简单包装器,用于根据文件的大小创建、扩展或截断文件。
它可用于管理交换文件(需要连续块)或巨大的稀疏文件。
有关详细信息,请参阅 /ansible-collections/community.general/blob/main/plugins/modules/files/
下的 filesize.py
。
我喜欢截断或调整由其他应用程序打开和使用的现有文件。例如,随着时间的推移,磁盘可能会被占用大量 space 的日志文件弄得乱七八糟,例如 /var/log/secure
.
简单来说 Linux 相当于
truncate -s 0 /var/log/secure
dd if=/dev/zero of=/var/log/secure bs=1M count=0
echo > /var/log/secure
根据
- How to empty ("truncate") a file on Linux that already exists and is protected in someway?
- How to create a file with a given size in Linux?
- How to create a file with ANY given size in Linux?
并通过 tail -F /var/log/secure
每个都会导致
==> /var/log/secure <==
tail: /var/log/secure: file truncated
tail: /var/log/secure: file truncated
tail: /var/log/secure: file truncated
而不是
==> /var/log/secure <==
tail: ‘/var/log/secure’ has been replaced; following end of new file
经过一些测试,Ansible v2.9 中的所有可用模块(file
、lineinfile
、copy
等)似乎都用新的空文件替换了现有文件,但不会截断或调整大小并导致已经提到的
==> /var/log/secure <==
tail: ‘/var/log/secure’ has been replaced; following end of new file
我知道通过 logrotate
旋转、压缩和删除日志文件可能是更好的解决方案。
似乎 Ansible 问题 #902 没有以那种方式实现。
但是,从 Ansible v3.0.0 开始,随着 filesize
_module,引入了一个围绕 dd
的简单包装器,用于根据文件的大小创建、扩展或截断文件。
它可用于管理交换文件(需要连续块)或巨大的稀疏文件。
有关详细信息,请参阅 /ansible-collections/community.general/blob/main/plugins/modules/files/
下的 filesize.py
。