シェルスクリプトの作成中に非常に奇妙なことに遭遇しています。シェルスクリプトの奇妙な出力
最初は次のスクリプトがあります。私はこのスクリプトを実行した
OUTPUT_FOLDER=/home/user/output
HOST_FILE=/home/user/host.txt
LOG_DIR=/home/user/log
SLEEPTIME=60
mkdir -p $OUTPUT_FOLDER
while true
do
rm -f $OUTPUT_FOLDER/*
DATE=`date +"%Y%m%d"`
DATETIME=`date +"%Y%m%d_%H%M%S"`
pssh -h $HOST_FILE -o $OUTPUT_FOLDER
while read host
do
numline=0
while read line
do
if [[ $numline == 0 ]]
then
FIELD1=`echo $line | cut -d':' -f2 | cut =d' ' -f2`
fi
((numline+=1))
done < ${OUTPUT_FOLDER}/${host}
echo "$DATETIME,$FIELD1" >> ${LOG_DIR}/${DATE}.log
done < $HOST_FILE
sleep $SLEEPTIME
done
、60秒ごとに、私は私のログファイルに
$DATETIME,$FIELD1
値が表示されます。
最初の1分が経過した後、30秒ごとにそれが表示されますが、私は20160920_120232,
と表示されます。出力があってはならないことを意味します。私の出力フォルダFIELD1
は空です。
さらに奇妙なことに、これをデバッグしようとしている間に、私はログファイルに印刷するためにさらにecho
ステートメントを追加し、それらの行を削除しました。しかし、最初の1分が経過してから30秒ごとに印刷され続けました。見知らぬ人はまだ私はその後、while true
ブロック内のすべてをコメントアウトということです、それは、でも、私は何も私のログファイルに印刷されないことを期待していこのスクリプトで
OUTPUT_FOLDER=/home/user/output
HOST_FILE=/home/user/host.txt
LOG_DIR=/home/user/log
SLEEPTIME=60
mkdir -p $OUTPUT_FOLDER
while true
do
: << 'END'
rm -f $OUTPUT_FOLDER/*
DATE=`date +"%Y%m%d"`
DATETIME=`date +"%Y%m%d_%H%M%S"`
pssh -h $HOST_FILE -o $OUTPUT_FOLDER
while read host
do
numline=0
while read line
do
if [[ $numline == 0 ]]
then
FIELD1=`echo $line | cut -d':' -f2 | cut =d' ' -f2`
fi
((numline+=1))
done < ${OUTPUT_FOLDER}/${host}
echo "$DATETIME,$FIELD1" >> ${LOG_DIR}/${DATE}.log
done < $HOST_FILE
sleep $SLEEPTIME
END
done
では何
、私は前に私が削除したecho
のステートメントと空のFIELD1
の行を見てください。私は毎回正しいバージョンのスクリプトを実行していることを確認しました。
何が起こっていますか?
認識していないバックグラウンドプロセスはありますか? – Jokester
変更後にプロセスを再起動しましたか?そして、古いプロセスが本当に実行されていないことを確認しましたか? – yaccz
'fuser -k/path/to/file'は、そのファイルに書き込むすべてが死んでいることを確認するために、あなたの友人です。または 'fuser/path/to/file'だけで、ハンドルがあるプロセスのリストが期待どおりであることを確認してください。 –