私はこのようなスクリプトを書く:なぜ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で実行すると、出力は正常です。 体はなぜそれを知っていますか?システムバグですか?
./termの出力がログファイルに書き込まれる前にバッファリングされている可能性があります。 1024/2048などのバッファサイズが多い可能性があります。したがって、より多くのログ情報を強制的に書き込むことができれば、出力が見えます。また、あなたは '(...)'でcmdをなぜ必要としますか?それを削除すると、問題が解決する場合があります。 ORシステムが 'unbuffer'を持っているか確認してください(あなたのPATHであれば' unbuffer'が表示されますが、他のnonPATHディレクトリにあるかもしれません)。最後に、nohupと '&'で実行しているものは、あなたのcrontabを入れてスクリプトから2つの要素を取り除くための良い候補のように見えます。がんばろう。 – shellter
プロセスという用語は、常に実行されている必要があります。それは仕事の仕事ではない、私はcrontabが私のrequriementを満たすとは思わない。頻繁に印刷されるプロセスという用語は問題を引き起こしますか?システムがディスクに書き込む前に、バッファは書き換えられ、情報は失われますか? – yanshuyuan