- PR -

シェルスクリプトのご質問

1
投稿者投稿内容
kata
ベテラン
会議室デビュー日: 2006/10/04
投稿数: 69
投稿日時: 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行だけを削除するよい手はありませんでしょうか。

宜しくお願いいたします。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-01-09 10:38
引用:

kataさんの書き込み (2007-01-09 10:26) より:
条件として、rm -rf /tmp/test.txtはできません。
なぜなら、/tmp/test.txtには、/var/log/messagesのように、
次々と書き込みがされているからです。


/tmp/test.txtを適当なファイル名にmvしてから処理するわけにはいかないんでしょうか?
BackDoor
ぬし
会議室デビュー日: 2006/02/20
投稿数: 831
投稿日時: 2007-01-09 13:07
こんにちは。

引用:

kataさんの書き込み (2007-01-09 10:26) より:

(3)そして、読み込んだ1行だけを/tmp/test.txtから削除します。

条件として、rm -rf /tmp/test.txtはできません。
なぜなら、/tmp/test.txtには、/var/log/messagesのように、
次々と書き込みがされているからです。


ファイルが削除できない理由と同じ理由で更新できないのでは?
textファイルを更新系の複数プロセスで共有すること自体不可能かと思われますが。

編集:以下のコメントを追加

shimixさんも、同じ理由で複製案を提示されています。
詳細仕様が不明ですが、根本的に考え直す必要があろうかと思われます。


[ メッセージ編集済み 編集者: BackDoor 編集日時 2007-01-09 13:22 ]
punk
ベテラン
会議室デビュー日: 2002/08/07
投稿数: 75
投稿日時: 2007-01-09 17:13
punkです.

引用:


条件として、rm -rf /tmp/test.txtはできません。
なぜなら、/tmp/test.txtには、/var/log/messagesのように、
次々と書き込みがされているからです。




どのくらい次々と書き込まれているのかわかりませんが,現状こんな感じしかむりではないでしょうか.

$ mv /tmp/test.txt /tmp/test_move.txt; touch /tmp/test.txt

読み込んで元を更新するなら移動して空にした方が早いような肝.
#順番に1行づつ消さなければならないのならノーですが.
mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-01-09 17:24
「次々と書き込みがされている」というのは、「ロックしている」ということですか?
1回の書き込みが1トランザクションであれば、移動で問題ない気がしますが。
大抵のログ出力は、ファイルがなければ作られるようになっているような。
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-01-09 18:02
こんにちは。
「次々と書き込みがされている」というのが、「サーバプロセスがログファイルをオープンしたままで次々書き込みを行っている」ような状況であれば、mv だけではマズいです。

kataさんの希望されていることが、ログローテートに似ているように思いますので、ログのローテートに関する過去の投稿も参考にされては如何でしょうか。

[ メッセージ編集済み 編集者: angel 編集日時 2007-01-09 18:12 ]
kata
ベテラン
会議室デビュー日: 2006/10/04
投稿数: 69
投稿日時: 2007-01-10 09:08
おはようございます。
kataでございます。

皆様ご教授ありがとうございました。

一度mvさせてから処理をする方向で進めてみたいと思います。

ログローテートはその後に検討させていただきます。
ありがとうございました。
ますだ
会議室デビュー日: 2007/01/10
投稿数: 1
投稿日時: 2007-01-10 13:16
どんなソフトウェアがどうやってファイルに書き込みに行くか、スクリプトはどのようなものかにもよりますが、条件によっては名前付きパイプを使うとよいかもしれません。
書き込む側もスクリプトだったりしてブロックされるのが問題になるとかなら、syslog経由でパイプに出してみるとか・・・


#件名が自分に敬語になってますよ(*'-')
1

スキルアップ/キャリアアップ(JOB@IT)