サポートチーム便り2021.06.23
これは、便利!findコマンドによる自動ログローテート!
Question
NTPを起動しているとIFSにログファイルが毎日作成されます。
一定期間だけ残して古いログファイルを消したいのですが何か良い方法はありませんか?
現在は、定期的にWRKLNKの画面からオプション4で手動削除しています。
Answer
findコマンドとxargsを組み合わせて条件付きの削除ができそうです。
まずは、findコマンドの使い方を見てみましょう。
NTPのログか書かれるディレクトリーは、/QIBM/UserData/OS400/TCPIP/NTPです。
仮に、365日だけ保存して、それ以前のログファイルを削除対象にすることにします。
-mtimeパラメーターで現在との日数差を指定できます。
Qshellを起動して、findを実行してみます。
STRQSH
find /QIBM/UserData/OS400/TCPIP/NTP -mtime +365
条件に合致するファイルの一覧が表示されます。
次に削除ですが、このfindコマンドの検索結果を引数リストにして、rm(削除コマンド)に渡すというものです。条件に合致しているファイルをすべて削除することができます。
コマンドは、
find /QIBM/UserData/OS400/TCPIP/NTP -mtime +365 | xargs rm -f
下図はテストディレクトリー(/home/BellData)で削除テストを実行した結果です。削除実行前後に、wc -lでカウントを表示しました。
実行前は328件の該当ファイルがあったものが、削除後は0件になったのが確認できます。
QshellはCLコマンドからの実行も可能です。コマンドは以下の通りです。
STRQSH CMD(' find /QIBM/UserData/OS400/TCPIP/NTP -mtime +365 | xargs rm -f ')
CLプログラムを作成して、バッチで実行することも可能ですし、ジョブスケジュールに追加することもできます。
NTPに限らず、定期的にログを書きだすアプリケーションの自動ログローテートとして応用できそうです。
他のパラメーターの使い方など、findコマンドの詳細については、IBM ドキュメントを参照してください。
https://www.ibm.com/docs/ja/i/7.4?topic=directories-find
by 杜