私たちはからプロセスを自動化したいと思います/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) シェルスクリプトの生成/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の下の個々のディレクトリを削除することもできます。
...
メインエディタ!私の答えの残りの部分は、abrt-cliコマンドでfindコマンドを使用しようとしたので、完全に間違っています。このアプローチには多くの問題があります。
- /var/spoo/abrtの下のディレクトリ自体には多くのサブディレクトリがある可能性があるため、検索の深さを制限する必要があります。
- ディレクトリに常に古いタイムスタンプがあるわけではなく、abrtサービスは時々いくつかの古いレポートを処理する必要があるため、findは常にすべての古いレポートをキャプチャするわけではありません。