如何使用特定目录中的 cron 作业删除日志文件

问题描述 投票:0回答:1

您好,如何删除特定目录中的特定日志文件 例如,我运行一些脚本,它每小时在目录中生成数百个日志文件

/home/admin/web/diegeschichte.in/public_html/wp-content/tv
日志文件以
.ts
结尾 删除这些文件的正确 cron 作业是什么

这是正确的吗?

#!/bin/sh
find /home/admin/web/diegeschichte.in/public_html/wp-content/tv -name '*.ts' -mtime +7 -exec rm -f {} \;

如果是,我应该在哪里保存这个 cron 作业文件?

#!/bin/sh
find /home/admin/web/diegeschichte.in/public_html/wp-content/tv -name '*.ts' -mtime +7 -exec rm -f {} \;
ubuntu cron cron-task
1个回答
0
投票

该脚本将删除子树

/home/admin/web/diegeschichte.in/public_html/wp-content/tv
中以
.ts
结尾且至少在 7 天前修改过的文件(或目录)。 只有你知道这是否正确。 将日志文件写入 /home 目录而不是 /var/log 是很奇怪的。

您可能需要考虑:

  • -ctime
    更改为
    -mtime
    ? 否则,写入的文件可能会永远保留。
  • 如果您只想删除文件,请添加
    -type f
  • 如果您不希望出现不存在的文件,请删除
    -f
    (同时删除您的目录)
  • 添加
    -maxdepth ...
    ,这样就不会意外遍历子目录(如果有)
  • find ... -print0 | xargs -0 rm
    可能会比一次删除一个文件更快。
  • logrotate
    包而不是为此构建的
    find
  • 您可以登录到系统日志而不是创建所有这些文件吗?

我会将该文件存储在 /usr/local/bin 中。 要从 cron 运行脚本,您需要为具有相关文件写入权限的用户创建一个 crontab。

crontab -e
然后添加计算出您想要用于脚本的时间表,例如午夜过后每 13 分钟一次:

13 0 * * * /usr/local/bin/your_script

或者,您也可以在 /etc/cron.d 中放置一个文件来运行您的脚本。 这需要 root,但它允许您指定执行脚本的用户。 例如:

13 0 * * * * your_user /usr/local/bin/your_script

(systemd 还具有运行定时命令的能力)。

如果您计划更频繁地运行脚本,请考虑当下一个脚本启动时(以及下一个和下一个)脚本可能仍在运行,但服务器仍然没有响应。 为了防止这种情况,请考虑使用像

flock
这样的文件锁和/或使用
timeout
命令运行它。

如果您可能拥有大量文件,请考虑使用

find ... | head -z -n 1000 | xargs ...
设置一次处理文件数的上限,例如 1000 个。 如果这比
timeout
更快,脚本将在每次运行中取得进展。 然后您可以更频繁地运行此脚本,因为它会分散 I/O 负载。

© www.soinside.com 2019 - 2024. All rights reserved.