私は次のことをしようとしています:
の出力を取得free -mo
し、2 行目を取得して 30 秒ごとにファイルに記録します。
私が走るとき
$free -mo -s 30
実行され、30 秒ごとに出力が表示されます。
しかし、私が走るとき
$ free -mo -s 30 | head -2 | tail -1
1 回だけ実行されます。何が悪いのかわかりません。
free マニュアルには free -s 30 とあり、30 秒ごとにコマンドを実行します。
私は次のことをしようとしています:
の出力を取得free -mo
し、2 行目を取得して 30 秒ごとにファイルに記録します。
私が走るとき
$free -mo -s 30
実行され、30 秒ごとに出力が表示されます。
しかし、私が走るとき
$ free -mo -s 30 | head -2 | tail -1
1 回だけ実行されます。何が悪いのかわかりません。
free マニュアルには free -s 30 とあり、30 秒ごとにコマンドを実行します。
head -2
出力の最初の 2 行のみを返し、終了します。tail -1
最後の行を返し、終了します。プログラムがパイプラインで終了すると、パイプライン全体が強制終了されるため、いつ終了するかfree
で停止しhead
ますtail
。
あなたの答えに感謝します。プロセスのメモリ使用率を監視しようとしていました。わかったと思います。
START_TIME=$(date);
cd /data;
INPUT_DATA=$1;
CODE_FILE=$2;
TIMES=$3;
echo "$START_TIME" > "$CODE_FILE.freeMemory_$TIMES.log";
free -mo -s 30 >> "$CODE_FILE.freeMemory_$TIMES.log" &
freepid=$!;
sleep 1m;
#echo "PID generated for free command -- $freepid";
START_TIME=$(date);
i=0;
while [ $i -le $TIMES ]
do
sh runCode.sh $CODE_FILE "output.csv" $INPUT_DATA;
i=`expr $i + 1`
done
END_TIME=$(date);
echo "process started at $START_TIME and ended at $END_TIME " ;
sleep 1m;
kill -9 $freepid;
END_TIME=$(date);
echo "$END_TIME" >> "$CODE_FILE.freeMemory_$TIMES.log";
試す
free -mos 30 | grep 'Mem:' >yourlog.txt
(しかし、この種のデータをキャプチャするために sar のようなものを検討する方がよいかもしれません - それは他の多くのものを報告することもできます - データからレポートを生成するまでフィルタリング/抽出を延期するだけです)。
使用するfree -mo -s 30 &> test.txt &
これにより、コマンドからのすべての出力が取得され、free
test.txt に出力され、バックグラウンドで実行されます。
ウィル・ハートゥングは正しい。代わりにこれを行います:
真の間; フリーモを行います | 頭 -2 | テール -1; 30 睡眠; 終わり