【问题标题】:How to truncate an existing and opened file using Ansible?如何使用 Ansible 截断现有和打开的文件?
【发布时间】:2022-01-07 13:15:52
【问题描述】:

我喜欢截断或调整由其他应用程序打开和使用的现有文件的大小。例如,随着时间的推移,磁盘中可能会出现大量占用大量空间的日志文件,例如 /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

根据

通过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 rhel rhel7


    【解决方案1】:

    Ansible 问题 #902 似乎没有以这种方式实现。

    然而,从 Ansible v3.0.0 开始,filesize_module 引入了一个简单的 dd 包装器,用于根据文件大小创建、扩展或截断文件。

    它可用于管理交换文件(需要连续块)或大型稀疏文件。

    有关详细信息,请参阅 /ansible-collections/community.general/blob/main/plugins/modules/files/ 下的 filesize.py。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 2017-03-01
      相关资源
      最近更新 更多