清除 /var/spool/abrt/ 的正确方法是什么

清除 /var/spool/abrt/ 的正确方法是什么

我们希望自动化从/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 命令。这种方法有很多问题:

  1. /var/spoo/abrt 下的目录本身可以有许多子目录,因此查找需要受深度限制
  2. 目录并不总是具有旧的时间戳,abrt 服务必须不时地接触一些旧的报告,因此 find 并不总是捕获所有旧的报告。

相关内容