- - PR -
シェルスクリプトのご質問
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-01-09 10:26
kataと申します。
今、スクリプトを作成しているのですが、 行き詰ってしまい困っています。 どなたかご教授ください。 仕組みは、以下の通りです。 #-----------------------------------# /tmp/test.txt ↓test.txtの中身 number1 number2 number3 number4 number5 ・ ・ ・ #----------------------------------# (1)このファイルを上から1行ずつ読み込んでいきます。 (2)読み込んだ1行ずつ/tmp/test_move.txt にリダイレクトします。 (3)そして、読み込んだ1行だけを/tmp/test.txtから削除します。 このような流れです。 条件として、rm -rf /tmp/test.txtはできません。 なぜなら、/tmp/test.txtには、/var/log/messagesのように、 次々と書き込みがされているからです。 ファイルを1行ずつ読み込んで、 その読み込んだ1行だけを削除するよい手はありませんでしょうか。 宜しくお願いいたします。 | ||||
|
投稿日時: 2007-01-09 10:38
/tmp/test.txtを適当なファイル名にmvしてから処理するわけにはいかないんでしょうか? | ||||
|
投稿日時: 2007-01-09 13:07
こんにちは。
ファイルが削除できない理由と同じ理由で更新できないのでは? textファイルを更新系の複数プロセスで共有すること自体不可能かと思われますが。 編集:以下のコメントを追加 shimixさんも、同じ理由で複製案を提示されています。 詳細仕様が不明ですが、根本的に考え直す必要があろうかと思われます。 [ メッセージ編集済み 編集者: BackDoor 編集日時 2007-01-09 13:22 ] | ||||
|
投稿日時: 2007-01-09 17:13
punkです.
どのくらい次々と書き込まれているのかわかりませんが,現状こんな感じしかむりではないでしょうか. $ mv /tmp/test.txt /tmp/test_move.txt; touch /tmp/test.txt 読み込んで元を更新するなら移動して空にした方が早いような肝. #順番に1行づつ消さなければならないのならノーですが. | ||||
|
投稿日時: 2007-01-09 17:24
「次々と書き込みがされている」というのは、「ロックしている」ということですか?
1回の書き込みが1トランザクションであれば、移動で問題ない気がしますが。 大抵のログ出力は、ファイルがなければ作られるようになっているような。 | ||||
|
投稿日時: 2007-01-09 18:02
こんにちは。
「次々と書き込みがされている」というのが、「サーバプロセスがログファイルをオープンしたままで次々書き込みを行っている」ような状況であれば、mv だけではマズいです。 kataさんの希望されていることが、ログローテートに似ているように思いますので、ログのローテートに関する過去の投稿も参考にされては如何でしょうか。 [ メッセージ編集済み 編集者: angel 編集日時 2007-01-09 18:12 ] | ||||
|
投稿日時: 2007-01-10 09:08
おはようございます。
kataでございます。 皆様ご教授ありがとうございました。 一度mvさせてから処理をする方向で進めてみたいと思います。 ログローテートはその後に検討させていただきます。 ありがとうございました。 | ||||
|
投稿日時: 2007-01-10 13:16
どんなソフトウェアがどうやってファイルに書き込みに行くか、スクリプトはどのようなものかにもよりますが、条件によっては名前付きパイプを使うとよいかもしれません。
書き込む側もスクリプトだったりしてブロックされるのが問題になるとかなら、syslog経由でパイプに出してみるとか・・・ #件名が自分に敬語になってますよ(*'-') |
1