オンライン上の問題解決とshellスクリプトによる最近のn回のバックアップ記録の自動保持
3502 ワード
プロジェクトで発生した問題
ある日の午前、サーバーのカートンが特に深刻で、ページのロード速度が非常に遅く、一部のページのリフレッシュに404の問題が発生し、サーバーのtabコマンドの自動プロンプトにも問題が発生し、ビル主は九牛二虎の力を費やした.サーバーの調査によると、サーバーのデータディスクに100%占有されている問題が発生し、この問題が発生した原因はJenkinsがサーバーを配置するたびに、前回のwarは自動的にバックアップされますが、開発段階の頻繁な導入により、最終的にはハードディスク(HDD)がいっぱいになります.
ソリューションの実装プロセス
バックアップフォルダの下にあるすべてのファイルを取得
Googleのお父さんのヒントによって、スレ主は次のコマンドを見つけました.find -mtime + -name " " -exec rm -rf {} \;
インスタンスコマンド:find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;
説明:
/opt/soft/log/ディレクトリの下にある30日前に「.log」付きのファイルをすべて削除します.
具体的なパラメータは以下のとおりです.
find:linuxの検索コマンド、ユーザーが指定した条件のファイルを検索します./opt/soft/log/:クリーンアップしたい任意のディレクトリ.-mtime:標準文の書き方;+30:30日前のファイルを検索します.ここでは日数を数字で表します."×.log":検索するデータ型、×.jpg「拡張子jpgというすべてのファイルを検索する」×「すべてのファイルを検索することを表します.これは柔軟に運用できます.-exec:固定書き方;rm-rf:ディレクトリを含むファイルを強制的に削除します;{};:固定書き方、一対の括弧+スペース++;
問題解決の考え方:
もちろん、スレ主はバックアップディレクトリの下のすべてのファイルをバカに削除することはできません.そうすれば、バックアップは意味を失うのではないでしょうか.だから考えを変えると次の命令がありますfind ${BAK_HOME} -mtime +1 -name "*:*" | wc -l
説明:
バックアップディレクトリの下のすべての1日前に「:」が付いていたすべてのファイルの数を取得します.find ${BAK_HOME} -mtime +1 -name "*:*"
説明:
バックアップディレクトリの下にあるすべての1日前に持っていた「:」のすべてのファイルの数を取得します.
ここまで来たら私たちの問題はほとんど解決できない.so、続いて下を見てください.
ソリューションの考え方とshellスクリプトの実現
構想
現在、この問題を解決する方法は、従来の配置スクリプトにスクリプトを追加し、最近の10回の配置のバックアップ記録を保持し、10回以上のバックアップ記録を削除することである.
shellスクリプトの実装
論理はとてもはっきりしていて、構想はとてもはっきりしていて、私はここで引き続き述べないで、みんなに感謝します!#!/bin/sh
BAK_HOME="/home/saveHistoryData/iam-share-8083"
keepNum=5
fileNum=$(find ${BAK_HOME} -mtime +1 -name "*:*" | wc -l)
echo "${fileNum}"
for file in $(find ${BAK_HOME} -mtime +1 -name "*:*"); do
if test $[fileNum] -gt $[keepNum];then
rm -rf ${file}
fileNum=${fileNum}-1
echo "delete backup file"
else
echo "do no thing"
fi
done
バックアップフォルダの下にあるすべてのファイルを取得
Googleのお父さんのヒントによって、スレ主は次のコマンドを見つけました.
find -mtime + -name " " -exec rm -rf {} \;
インスタンスコマンド:
find /opt/soft/log/ -mtime +30 -name "*.log" -exec rm -rf {} \;
説明:
/opt/soft/log/ディレクトリの下にある30日前に「.log」付きのファイルをすべて削除します.
具体的なパラメータは以下のとおりです.
find:linuxの検索コマンド、ユーザーが指定した条件のファイルを検索します./opt/soft/log/:クリーンアップしたい任意のディレクトリ.-mtime:標準文の書き方;+30:30日前のファイルを検索します.ここでは日数を数字で表します."×.log":検索するデータ型、×.jpg「拡張子jpgというすべてのファイルを検索する」×「すべてのファイルを検索することを表します.これは柔軟に運用できます.-exec:固定書き方;rm-rf:ディレクトリを含むファイルを強制的に削除します;{};:固定書き方、一対の括弧+スペース++;
問題解決の考え方:
もちろん、スレ主はバックアップディレクトリの下のすべてのファイルをバカに削除することはできません.そうすれば、バックアップは意味を失うのではないでしょうか.だから考えを変えると次の命令があります
find ${BAK_HOME} -mtime +1 -name "*:*" | wc -l
説明:
バックアップディレクトリの下のすべての1日前に「:」が付いていたすべてのファイルの数を取得します.
find ${BAK_HOME} -mtime +1 -name "*:*"
説明:
バックアップディレクトリの下にあるすべての1日前に持っていた「:」のすべてのファイルの数を取得します.
ここまで来たら私たちの問題はほとんど解決できない.so、続いて下を見てください.
ソリューションの考え方とshellスクリプトの実現
構想
現在、この問題を解決する方法は、従来の配置スクリプトにスクリプトを追加し、最近の10回の配置のバックアップ記録を保持し、10回以上のバックアップ記録を削除することである.
shellスクリプトの実装
論理はとてもはっきりしていて、構想はとてもはっきりしていて、私はここで引き続き述べないで、みんなに感謝します!
#!/bin/sh
BAK_HOME="/home/saveHistoryData/iam-share-8083"
keepNum=5
fileNum=$(find ${BAK_HOME} -mtime +1 -name "*:*" | wc -l)
echo "${fileNum}"
for file in $(find ${BAK_HOME} -mtime +1 -name "*:*"); do
if test $[fileNum] -gt $[keepNum];then
rm -rf ${file}
fileNum=${fileNum}-1
echo "delete backup file"
else
echo "do no thing"
fi
done