こんにちは、ふじみやです。
私はマイクラのマルチプレイ用サーバーを Xserver VPS で運用しているのですが、通常のサーバーソフトのログのほか以前ご紹介したマイクラサーバーの自動停止プログラムに関するログが毎日生成されるため、使うことのない古いログがどんどん溜まっていってしまいます。
とはいえ、古いログを手作業で削除していくのも面倒なので、今回は作成後一定期間経過したログは削除するようにしていきます。
使用環境・コンセプト
使用環境
Xserver VPS の Ubuntu 22.04.1 LTS を利用します。
とはいえ、通常のLinuxコマンドが使えるものであればAWSの Amazon Linux 2 等でも同じです。
コンセプト
以下のコンセプトで設計をしていきます。
- 削除対象は
~/minecraft/logs
内に存在 - 削除対象は最終更新後1か月(30日)以上経過したログファイル
- 毎週日曜日の夜10時に削除を自動実行
なお、~
はホームディレクトリである/home/ubuntu
を意味します。
設定内容
コンセプトに基づくと、ファイルを検索するfind
コマンド、ファイルを削除するrm
コマンドと、コマンドのスケジュール管理を行うcron
を利用すれば何とかなりそうです。
find
find
コマンドはファイルの検索をする際に使用します。
今回の場合だと、最終更新日から30日以上経過したファイル(.log)を検索します。
find ~/minecraft/logs -name "*.log" -mtime +30
find
コマンドのオプションである-mtime
はファイルのデータが最終更新された日を意味し、+30
は「30日よりも前」を示しています。
試しにこのコマンドを入力すると、次のような表示になるはずです(該当するファイルがなければ何も表示されません)。
$ find ~/minecraft/logs -name "*.log" -mtime +30
home/ubuntu/minecraft/logs/2023-01-01.log
home/ubuntu/minecraft/logs/2023-01-02.log
home/ubuntu/minecraft/logs/2023-01-03.log
home/ubuntu/minecraft/logs/2023-01-04.log
home/ubuntu/minecraft/logs/2023-01-05.log
・・・
rm
rm
コマンドはファイルやディレクトリなどを削除する際に利用するものです。
rm -f *.log
上記のコマンドは「カレントディレクトリ内の.logという名前のファイルを全て削除する」という意味になります。-f
というのは削除対象がなくともエラーを出力しないというオプションです。
この*.log
に該当する部分(引数)に先ほどのfind
コマンドの標準出力を渡せるようにすれば、目的を達成できそうですね。
パイプとxargs
パイプとは縦棒|
のことで、コマンドの標準出力の内容を次のコマンドへ渡す際に使われるコマンドです。
xargs
はパイプによって渡された標準出力の内容を引数とするコマンドですので、これらを組み合わせると次のようになります。xargs
が引数となりますので、通常のrm
コマンドとは順序が入れ替わる点にご注意ください。
find ~/minecraft/logs -name "*.log" -mtime +30 | xargs rm -f
cronの設定
あとは定期的にコマンド実行をするスケジュール管理をしておきましょう。
cronの使い方についてはこちらにて説明をしていますので、あわせてご参考ください。
crontab -e
でcron
の設定を開き、次を入力してください。なお、cron
での日時の指定の仕方は 分→時→日→月→曜日 となっており、曜日の指定方法は0〜7(0と7は日曜日)となっています。
# 30日以上経過したログファイルを毎週日曜22時に削除
0 22 * * 0 find ~/minecraft/logs -name "*.log" -mtime +30 | xargs rm -f
これで「毎週日曜日の夜10時に~/minecraft/logs
ディレクトリ内にある最終更新日が30日よりも前のログファイルを削除」という設定ができました。
まとめ
今回は古いログファイルを削除するため、find
コマンドとrm
コマンドをつなぐパイプやxargs
コマンドについてご紹介しました。
これでログファイルを保存しているディレクトリが整理されますので、皆さんもぜひ試して見てください。
それではまた。
コメント