Linux サーバのログ削除をshell + crontabでやっているんだけど、対象のログファイルが消えていない事に気付く。どうやら前任者が消えてるだろうと思い込んで放置していたようだ。
# 調査
・/var/log/cron では 削除用の shell は実行されている形跡がある。
・同様の事を行っているサーバではログは削除されている
・ログが削除されていないサーバは2台
# 確認
ログが削除されないサーバの 削除shell を手動で実行すると、エラーが出た。
"Argument list too long" → 引数多過ぎ
どうもパイプラインで渡している引数が多過ぎてコケていたらしい。ログディレクトリの中を見てみると、2009年頃から日毎のログが蓄積されていた。大体 (365 * 4 + α) * 2 程のファイルがある。xargs を使用してもなお消えない程のファイル数(引数量)だったようで、ここをどうにかしないと今後もエラーを吐き続けてしまう。
そんなわけで同様の内容でログのディレクトリ内に削除shellを作成し、相対pathに書き換えて実行する。ファイル毎の文字数が少なくなる事で引数全体の量を減らしてみる。
これが功を奏し、ログは削除された。
# 実験
この手の実験が割りと好きなので、自宅のLinux(Ubuntu)でも試してみる事にした。
まず適当なディレクトリにファイルを70000件作成する。その後同様shellを作成して実行。
1枚目 ― perl で70000ループを形成してファイルを自動生成
2枚目 ― shell で削除処理を記述
3枚目 ― 実行結果(shell内変更前と後)
こんな事もあるんだなぁと思った今日この頃。
# 調査
・/var/log/cron では 削除用の shell は実行されている形跡がある。
・同様の事を行っているサーバではログは削除されている
・ログが削除されていないサーバは2台
# 確認
ログが削除されないサーバの 削除shell を手動で実行すると、エラーが出た。
"Argument list too long" → 引数多過ぎ
どうもパイプラインで渡している引数が多過ぎてコケていたらしい。ログディレクトリの中を見てみると、2009年頃から日毎のログが蓄積されていた。大体 (365 * 4 + α) * 2 程のファイルがある。xargs を使用してもなお消えない程のファイル数(引数量)だったようで、ここをどうにかしないと今後もエラーを吐き続けてしまう。
そんなわけで同様の内容でログのディレクトリ内に削除shellを作成し、相対pathに書き換えて実行する。ファイル毎の文字数が少なくなる事で引数全体の量を減らしてみる。
これが功を奏し、ログは削除された。
# 実験
この手の実験が割りと好きなので、自宅のLinux(Ubuntu)でも試してみる事にした。
まず適当なディレクトリにファイルを70000件作成する。その後同様shellを作成して実行。
1枚目 ― perl で70000ループを形成してファイルを自動生成
2枚目 ― shell で削除処理を記述
3枚目 ― 実行結果(shell内変更前と後)
こんな事もあるんだなぁと思った今日この頃。
コメント
さすがに区別はつけてますが… (´・ω・)ノ > バヤシさん