0

ディレクトリがあります:

/ home / httpdocs /

このディレクトリには、ディレクトリまたはディレクトリのサブディレクトリ、またはサブディレクトリのサブディレクトリなどがあり、XMLファイル(.xmlで終わるファイル)が含まれている可能性があります-どのディレクトリにxmlファイルが含まれているかはわかりません。ディレクトリには大量のファイルが含まれています

すべてのファイルをアーカイブして実際のディレクトリから削除し、上記のディレクトリに過去7日間分のxmlファイルのみが含まれるようにします。

logrotateはこれを行うのに適したオプションであり、それが最善の方法であると私に言われました。もしそうなら、どのように設定しますか?

また、ロットローテーションを使用していない場合、これをスクリプト化できますか?このスクリプトは本番時間中に実行できますか、それともシステムを停止させますか?

Sas

4

3 に答える 3

3
find -name "*.xml" -mtime +7 -print0 | tar -cvzf yourArchive.tar.gz --remove-files --null --files-from -

gzip で圧縮された tar ファイル 'yourArchive.tar.gz' を作成します。このファイルには、現在のディレクトリ内のすべての *.xml ファイルと、過去 24*7 時間に変更されていないサブディレクトリのすべての深さと、これらのファイルを tar アーカイブに追加した後が含まれます。ファイルが削除されます。

編集:

このスクリプトは運用時間中に実行できますか?それともシステムが停止しますか?

実際にはシステムに依存します。これにより、大量の I/O 負荷が発生します。運用システムが大量の I/O を使用し、素晴らしい I/O サブシステム (ファイバー チャネルなどを使用して接続された巨大な RAID システムなど) を持っていない場合、これはパフォーマンスに顕著な影響を与えます。 . ただし、これがどれほど悪いかは詳細によって異なります。

システムの負荷が問題になる場合は、ファイルを追跡する小さなデータベースを作成できます。おそらく inotify を使用すると、長時間バックグラウンドで実行できるため、あまり気付かれません。

上記のプロセスの優先順位を を使用して設定することもできますがrenice、問題は CPU ではなく I/O であるため (CPU がうまくいかず、何らかの理由で I/O が非常に優れている場合を除きます)、これは目的の結果につながらない可能性があります。効果。しかし、次善の策は、sleep で装飾されたファイル ツリーをクロールする独自のスクリプトを作成することです。完了するまでに時間がかかりますが、本番システムへの影響は少なくなります。本当に行動するプレッシャーがない限り、これはお勧めしません。

于 2012-05-21T18:13:42.607 に答える
2

XML ファイルをアーカイブおよび削除するプログラムであるfind /home/httpdocs -name "*.xml" -mtime +7 -exec archive {} \;whereを使用します。archive

于 2012-05-21T18:07:33.503 に答える
0

findcron ジョブでこれを行うのがおそらく最も簡単でしょう。

検索コマンド:

find /home/httpdocs -name \*.xml -ctime +7 -exec mv -b -t /path/to/backup/folder {} +

これにより、/home/httpdocs ツリー内の .xml で終わるすべてのファイルが指定したバックアップ フォルダーに移動され、上書きされるすべてのファイルのバックアップが作成されます ( -b)。

ここで、これを cron ジョブとして設定するcrontab -eには、httpdocs フォルダーとバックアップ フォルダーの両方に対する書き込み権限を持つユーザーとして実行します (おそらく root ですsudo crontab -e)。次に、次のような行を追加します。

14    3    *    *    *  find /home/httpdocs -name \*.xml -ctime +7 -exec mv -b -t /path/to/backup/folder {} +

これにより、毎日午前 3 時 14 分にコマンドが実行されます (3 と 14 を別の時間に変更します)。find行を短くするために、コマンドをスクリプトに入れて実行することもできます。

于 2012-05-21T18:14:51.657 に答える