下記2点を実装したくここで有識者の方にアドバイスいただき作成しました。
・30日以上前のログは圧縮、同時に別dirへコピー
・1年経過した圧縮logは削除
シェルスクリプト以外にも、プログラム系を全く書いた事がなく
findで探したものをxargsで引き渡すを理解するのがやっとです。
for文とかif文とか、変数代入などの組み合わせが難しいです。
crontabに時間指定を入れて動かすため、
echoでerrorと表示させるが出来ません。
もしも下記スクリプトが途中で止まった場合に、条件分岐させるとかは
このベースを崩さず、どこかに入れられるものでしょうか??
#!/bin/bash # ================================================ # 日々・毎年の日数を変数指定する # ================================================ for_daily_check=30 daily="+${for_daily_check}" for_years_check=365 yearly="+${for_years_check}" # ================================================ # logが生成される場所を変数指定する # ================================================ target_dir1="/var/log/XX" target_dir2="/var/log/XXX" # ================================================ # /var/log配下で、gz拡張子がついてない、作成日時30日以上前のfileを圧縮 # ================================================ find ${target_dir1} ! -name "*.gz" -mtime ${daily} | xargs -I {} sh -c 'gzip {} && cp {}.gz /var/backup/XX' find ${target_dir2} ! -name "*.gz" -mtime ${daily} | xargs -I {} sh -c 'gzip {} && cp {}.gz /var/backup/XXX' # ================================================ # サーバ上に保存されてるgip形式のfileは365日以降は削除する # ================================================ find ${target_dir1} -name "*.gz" -type f -mtime ${yearly} | xargs rm -f find ${target_dir2} -name "*.gz" -type f -mtime ${yearly} | xargs rm -f
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/14 09:10