Linuxコマンドラインでn秒ごとにコマンドを繰り返すことは可能ですか?
たとえば、インポートを実行していて、実行しています
ls -l
ファイルサイズが増加しているかどうかを確認します。これを自動的に繰り返すコマンドが欲しいです。
5秒ごとに見る...
watch -n 5 ls -l
変更を視覚的に確認したい場合は--differences
、コマンドの前に追加しますls
。
OSXのマニュアルページによると、
--cumulative オプションは強調表示を「固定」し、これまでに変更されたすべての位置の実行中の表示を提示します。-t または --no-title オプションは、間隔、コマンド、およびディスプレイ上部の現在の時刻を示すヘッダーと、それに続く空白行をオフにします。
Linux/Unix の man ページはここにあります
while true; do
sleep 5
ls -l
done
"watch" は、Busybox で秒の端数を許可しませんが、"sleep" は許可します。それがあなたにとって重要な場合は、これを試してください:
while true; do ls -l; sleep .5; done
を使用すると、cron なしでコマンドを定期的に実行できますwhile
。
コマンドとして:
while true ; do command ; sleep 100 ; done &
[ ex: # while true; do echo `date` ; sleep 2 ; done & ]
例:
while true
do echo "Hello World"
sleep 100
done &
&
ループをバックグラウンドに置くので、最後を忘れないでください。ただし、コマンド「ps -ef | grep your_script」でプロセスIDを見つける必要があり、それを強制終了する必要があります。そのため、スクリプトを実行するときに「&」を追加してください。
# ./while_check.sh &
これはスクリプトと同じループです。ファイル「while_check.sh」を作成し、これを入れます:
#!/bin/bash
while true; do
echo "Hello World" # Substitute this line for whatever command you want.
sleep 100
done
次に、入力して実行しますbash ./while_check.sh &
時計は良いですが、画面をきれいにします。
watch -n 1 'ps aux | grep php'
「ドリフト」を回避したい場合、つまり、コマンドにかかる時間に関係なく、N 秒ごとにコマンドを実行する場合 (N 秒未満であると仮定)、コマンドを 5 秒ごとに 1 回繰り返す bash を次に示します。秒の精度 (それが追いつかない場合は警告を出力します):
PERIOD=5
while [ 1 ]
do
let lastup=`date +%s`
# do command
let diff=`date +%s`-$lastup
if [ "$diff" -lt "$PERIOD" ]
then
sleep $(($PERIOD-$diff))
elif [ "$diff" -gt "$PERIOD" ]
then
echo "Command took longer than iteration period of $PERIOD seconds!"
fi
done
スリープは 1 秒の精度しかないため、まだ少しドリフトする可能性があります。date コマンドを創造的に使用することで、この精度を向上させることができます。
特定の回数何かをしたい場合は、いつでもこれを行うことができます:
repeat 300 do my first command here && sleep 1.5
以下を実行して、サイズのみをフィルタリングできます。ファイルが呼び出された somefilename
場合、次のことができます
while :; do ls -lh | awk '/some*/{print $5}'; sleep 5; done
数あるアイデアのひとつ。