我们希望自动化从/var/spool/abrt/
.
我们有 RHEL 机器 - 版本 7.x。
已知的方法是执行以下操作
# systemctl stop abrtd
# systemctl stop abrt-oops
我们可以使用以下 rm 命令删除所有这些目录和文件:
# abrt-cli rm /var/spool/abrt/*
然后启动服务
# systemctl start abrtd
# systemctl start abrt-oops
我们希望将删除过程简化如下——它将删除 10 天以上的目录/var/spool/abrt/
find /var/spool/abrt/ -type d -ctime +10 -exec rm -rf {} \;
清除/var/spool/abrt/
目录是一个好的选择吗?
答案1
这是我的建议:
1)创建shell脚本/home/yael/purgeabrt.sh
$ cat purgeabrt.sh
#!/bin/bash
set -e
function cleanup()
{
systemctl start abrtd
systemctl start abrt-oops
}
trap cleanup EXIT
systemctl stop abrtd
systemctl stop abrt-oops
find /var/spool/abrt/ -type d -ctime +10 -exec abrt-cli rm {} \;
cleanup
2)运行脚本根:
sudo crontab -e
添加行:
*/5 * * * * bash /home/yael/purgeabrt.sh
为了cron
每 5 分钟执行一次作业。
编辑:
set -e
如果命令以非零状态退出,将终止脚本的执行。
trap cleanup EXIT
将捕获可能抛出到脚本的信号并执行清理代码。
笔记:脚本最后一行中的调用cleanup
可能是不必要的(多余的),但可以提高代码的可读性。
答案2
使用 abrt-cli 工具时不需要停止/启动服务。该工具的完整文档在这里:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/sect-abrt-cli
此外,您可以调用 abrt-cli 工具来删除 /var/spool/abrt 下的各个目录,而不是通配符 *。
...
主要编辑!我的答案的其余部分是完全错误的,因为它试图结合使用 find 命令和 abrt-cli 命令。这种方法有很多问题:
- /var/spoo/abrt 下的目录本身可以有许多子目录,因此查找需要受深度限制
- 目录并不总是具有旧的时间戳,abrt 服务必须不时地接触一些旧的报告,因此 find 并不总是捕获所有旧的报告。