您好,如何删除特定目录中的特定日志文件 例如,我运行一些脚本,它每小时在目录中生成数百个日志文件
/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 {} \;
该脚本将删除子树
/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 负载。