標準出力に絶えず連続して、でてくる内容をファイルに保存したいんですけど(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だからじゃないの?
ビーエスディーには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 して出力、
みたいな。
ていうか、実は既にあったりする?
>>237 daemontools にはそういうのをうまくやってくれる機能があるの?
>>238 >1分ごとにファイルを分割させながら保存したいのです
こんな機能ないよ。
>>239 loggerでsyslogに出力してnewsyslogする。
229です。
皆様レスありがとうございます。
logrotateで試して(kill -HUP使えるそうです)、
だめだったらperlでがんがってみます。
確か、newsyslogの設定ファイルに、pidファイル と、シグナル番号 を指定
すれば、newsyslogが宜しくやってくれたと思ったけど。
だから、syslog 経由しなくても、いいんじゃない。
>>236 Apache に付属している lotagelogs がそんな感じ。ちょっと仕様がダサいけど。
>>243 hogeがkill -HUPでログをクローズ・オープンし直してくれるのが確実ならね。