2012-05-12 5 views
0

私はこのようなスクリプトを書く:なぜlinuxは損失情報をリダイレクトしますか?

#!/bin/bash 
LOG_PATH=/root/cngiqos-log 
LOG_NAME=term.log 
TERM_PATH=/home/bnrcqos/qos_M11/term 
test -d $LOG_PATH || mkdir -p $LOG_PATH 
routeID='M11' 
if [ `ps -ef | grep 'term$' | grep -v grep | wc -l` -gt 0 ]; then 
    echo $routeID' term process is already running' 
else 
    cd $TERM_PATH 
    (nohup ./term > $LOG_PATH/$LOG_NAME 2>&1 &) 
fi 

そしてI入力「/root/cngiqos-log/term.log -fテール」とログ、ログの損失情報のログ出力のみの部分を参照してくださいログを出力してからもう出力しません。しかし、 "./term"を入力してfgで実行すると、出力は正常です。 体はなぜそれを知っていますか?システムバグですか?

+0

./termの出力がログファイルに書き込まれる前にバッファリングされている可能性があります。 1024/2048などのバッファサイズが多い可能性があります。したがって、より多くのログ情報を強制的に書き込むことができれば、出力が見えます。また、あなたは '(...)'でcmdをなぜ必要としますか?それを削除すると、問題が解決する場合があります。 ORシステムが 'unbuffer'を持っているか確認してください(あなたのPATHであれば' unbuffer'が表示されますが、他のnonPATHディレクトリにあるかもしれません)。最後に、nohupと '&'で実行しているものは、あなたのcrontabを入れてスクリプトから2つの要素を取り除くための良い候補のように見えます。がんばろう。 – shellter

+0

プロセスという用語は、常に実行されている必要があります。それは仕事の仕事ではない、私はcrontabが私のrequriementを満たすとは思わない。頻繁に印刷されるプロセスという用語は問題を引き起こしますか?システムがディスクに書き込む前に、バッファは書き換えられ、情報は失われますか? – yanshuyuan

答えて

0

多分あなたはあなたが求めているものを得るでしょうか? tailは、デフォルトで最後の10行だけを与えます。

+0

私は-fを知っていますが、-fを指定しても、待機を開始する前に完全なログが表示されません。そして、率直に言って、OPの問題の説明は、これが問題であることを除外するほど明確ではありません。多分、彼は質問を言い換えて、実際に実行されるコマンドで提示されたスクリプトの関係を述べることを心配するかもしれない。 – Jens

+0

はい、それは私がそれが問題になることは決してありませんが、私はそれを排除することはできませんね。私は私のコメントを削除します。がんばろう。 – shellter

関連する問題