☆シェルスクリプトを勉強するにあたって☆

このエントリーをはてなブックマークに追加
標準出力に絶えず連続して、でてくる内容をファイルに保存したいんですけど(hoge > log)、
長時間出力させる必要があるので、1分ごとにファイルを分割させながら保存したいのです。


ですが、これでは最初のコピー先に書き込まれて分割できません。
hogeのプロセスは止めることができません。
どう書けばいいか教えて下さい。

#! /bin/csh
set working_dir="/var/tmp"    
set run_time=720 #720min==12 hour
cd $working_dir
( hoge > log )&

while ($run_time)
sleep 60
set dt=`date +%y_%m\-%d_%H:%M`
set endfile = "$dt"
cp log $endfile
cp /dev/null log
@ run_time--
end
>>229
logrotateとかnewsyslogのソースを探検してみるってのはどうよ。
しかしなぜに今時cshのシェルスクリプト。
231名無しさん@お腹いっぱい。:02/10/05 23:23
cshのスクリプトか・・・
BSDだからじゃないの?
>>231
BSD には sh がないのか?
ビーエスディーにはPOSIX準拠のシェルがハイッとります。
234名無しさん@お腹いっぱい。:02/10/06 02:43
うむ、awkなり、perlなりrubyなり通さないとダメかな?
シグナル受けるとファイルclose&openするようなインターフェース
になるかな? 外部フィルタを使うとすると。
案外、hogeがその機能持ってたりしてって、リダイレクトしてるのか。
>>229
cp /dev/null log

じゃなくって、

echo -n > log

とかだとどうなる?
>>234
そういうことしてくれるフィルタプログラムがあると便利そうだね。
hoge | foo /var/log/bar -t 60 とかすると、
自力で /var/log/bar.YYYYMMDDhhmm で rotate しつつ open&close して出力、
みたいな。
ていうか、実は既にあったりする?
>>229
daemontools つかえや
>>237
daemontools にはそういうのをうまくやってくれる機能があるの?
>>238
>1分ごとにファイルを分割させながら保存したいのです
こんな機能ないよ。
>>239
loggerでsyslogに出力してnewsyslogする。
229です。
皆様レスありがとうございます。
logrotateで試して(kill -HUP使えるそうです)、
だめだったらperlでがんがってみます。
>>241
あれ、そうなの? >>240 の方法でバッチリだと思うけど、おれは。
確か、newsyslogの設定ファイルに、pidファイル と、シグナル番号 を指定
すれば、newsyslogが宜しくやってくれたと思ったけど。
だから、syslog 経由しなくても、いいんじゃない。
>>236
Apache に付属している lotagelogs がそんな感じ。ちょっと仕様がダサいけど。
>>243
hogeがkill -HUPでログをクローズ・オープンし直してくれるのが確実ならね。