回答:
watchコマンドを使用できます 。watchは、指定されたコマンドを定期的に実行するために使用されます。
ターミナルを開き、次を入力します。
watch -n x <your command>
xを希望する秒単位の時間に変更します。
watchコマンドとそのオプションの使用に関する詳細については、man watchこのリンクを実行するかアクセスしてください。
たとえば、次のコマンドは、同じターミナルで60秒ごとにデスクトップディレクトリの内容をリストするため、変更が発生したかどうかを確認できます。
watch -n 60 ls -l ~/Desktop
watch「history enabled」タイプのコマンドで使用する方法はありますか?を使用するのwatchが大好きですが、最後の実行だけでなく、以前の実行のログも表示したい場合があります。そして、はい、スクリプト(while true)を使用してこれを達成できることは知っていますが、watchユーティリティを使用する方がずっときれいです!
nuxの答えとは別に、ターミナルでこのコマンドを使用することもできます。
while true; do <your_command>; sleep <interval_in_seconds>; done
例
while true; do ls; sleep 2; done
このコマンドはls、2秒間隔で出力を印刷します。
Ctrl+ Cを使用してプロセスを停止します。
の欠点はほとんどありません watch
watch-cまたは--colorオプションを使用してエスケープ文字を渡すANSIカラーシーケンスを解釈します。たとえば、の出力pygmentizeは機能しls --color=autoますが、では失敗します。上記の状況では、これがより良いオプションとして表示される場合があります。
watchそのために存在する、これは私が言うだろう少し役に立たないです
watchほとんどの場合に適しています。だから、冒頭で「nuxの答えとは別に」と言ったのです。しかしwatch、たとえば、いくつかの問題がありますwatch。でエイリアスコマンドを使用することはできません。たとえばll、エイリアス化されているls -laFが、で使用することはできませんwatch。また、コマンドの出力が非常に長い場合、を使用してスクロールする際に問題が発生しwatchます。これらのいくつかの特別なケースでは、この答えがより良い選択肢に見えるかもしれません。
watch少なくとも私のバージョンでは、色付き出力のオプション-cまたは--colorオプションが許可されています。
while sleep xより良い-それは殺すのが簡単です。
watch、コマンド履歴を保持します。
souravcとnuxの答えを売り込みたかっただけです。
watchFreeBSD上で、たとえば、時計が「別のtty回線上のスヌープ」へのコマンドがある- Ubuntuで完璧に動作しますが、あなたはあなたの「UNIX-FUは」純粋になりたい場合はことを避けたいと思うかもしれません。while true; do command; sleep SECONDS; doneまた、警告があります-CTR + Cを使用してコマンドを殺すのは難しいかもしれません。あなたが好むかもしれませんwhile sleep SECONDS; do command; done-それは短いだけでなく、中断するのも簡単です。警告は、最初にスリープしてからコマンドを実行するためSECONDS、コマンドが最初に発生するまでしばらく待つ必要があるということです。sleepにwhileループ?私はCtrlキー+ Cがループを破っていない、任意の違いを見つけることができませんでし瞬時に何があって。
commandとsleep、あなたが殺した場合にのみ破りますtrue。
cron定期的なコマンドの実行を可能にするデーモンの理想的なタスクのように聞こえます。crontab -eコマンドを実行して、ユーザーのcron構成の編集を開始します。そのフォーマットは、に記載されているのcrontab(5) 。基本的に、5つの時間関連のスペース区切りフィールドとそれに続くコマンドがあります。
The time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sunday, or use names)
たとえば、毎週火曜日の午前11時にPythonスクリプトを実行する場合:
0 11 * * 1 python ~/yourscript.py
のような、時間を置き換える特別な名前もいくつかあります@reboot。一時ディレクトリを作成する必要がある場合に非常に役立ちます。私のcrontabから(リストされているcrontab -l):
# Creates a temporary directory for ~/.distcc at boot
@reboot ln -sfn "$(mktemp -d "/tmp/distcc.XXXXXXXX")" "$HOME/.distcc"
cronターミナルではなく舞台裏で走る
あなたがファイルシステムを監視している場合、それinotifywaitは素晴らしいですし、確かにあなたのシステムの負荷を減らします。
例:
で第一ターミナルのコマンドを入力します。
$ inotifywait .
次に、2番目のターミナルで、現在のディレクトリに影響するコマンド、
$ touch newfile
その後、元の端末でinotifywaitが起動してイベントを報告します
./ CREATE newfile2
またはループで
$ while true ; do inotifywait . ; done
Setting up watches.
Watches established.
./ OPEN newfile2
Setting up watches.
Watches established.
./ OPEN newfile2
Setting up watches.
Watches established.
./ DELETE newfile
Setting up watches.
Watches established.
./ CREATE,ISDIR newdir
Setting up watches.
Watches established.
grep something InALogFile|less、それはスクリプトですか?
.コマンドを省略できないよりも簡単なこともあります。
-m、ループなしで継続的に監視するために追加できることをマニュアルページで確認しました。
repeat次の手順を実行して、独自のコマンドを作成できます。ここにクレジット:
まず、.bash_aliasesファイルを開きます。
$ xdg-open ~/.bash-aliases
次に、これらの行をファイルの下部に貼り付けて保存します。
repeat() {
n=$1
shift
while [ $(( n -= 1 )) -ge 0 ]
do
"$@"
done
}
3番目に、ターミナルを閉じてから再度開くか、次のように入力します。
$ source ~/.bash_aliases
ほら!次のように使用できます。
$ repeat 5 echo Hello World !!!
または
$ repeat 5 ./myscript.sh
crontabを使用できます。コマンドcrontab -eを実行し、好みのテキストエディターで開き、この行を追加します
*/10 * * * * /path-to-your-command
これにより、コマンドが10分ごとに実行されます
* */4 * * * /path-to-your-command
これは、4時間ごとにコマンドを実行します
$ ..some command...; for i in $(seq X); do $cmd; sleep Y; done
繰り返すX回。
繰り返すのを待つY時間。
例:
$ echo; for i in $(seq 5); do $cmd "This is echo number: $i"; sleep 1;done
上記で提案された「監視」アプローチに関する別の懸念は、プロセスが完了したときにのみ結果を表示することです。「date; sleep 58; date」は、59秒後にのみ2つの日付を表示します。4分間実行しているコンテンツをゆっくり起動すると、コンテンツの複数のページがゆっくり表示されますが、実際には表示されません。
一方、「while」アプローチの懸念は、タスクの期間を考慮に入れていないことです。
while true; do script_that_take_between_10s_to_50s.sh; sleep 50; done
これにより、スクリプトは1分ごとに実行され、1分40秒かかる場合があります。そのため、cronが1分ごとに実行できたとしても、ここでは実行できません。
そのため、シェルの出力を生成されたとおりに表示し、正確な要求時間を待つには、前後の時間を調べ、whileでループする必要があります。
何かのようなもの:
while ( true ); do
echo Date starting `date`
before=`date +%s`
sleep `echo $(( ( RANDOM % 30 ) + 1 ))`
echo Before waiting `date`
after=`date +%s`
DELAY=`echo "60-($after-$before)" | bc`
sleep $DELAY
echo Done waiting `date`
done
これはこれを出力します:
ご覧のとおり、コマンドは1分ごとに実行されます。
Date starting Mon Dec 14 15:49:34 EST 2015
Before waiting Mon Dec 14 15:49:52 EST 2015
Done waiting Mon Dec 14 15:50:34 EST 2015
Date starting Mon Dec 14 15:50:34 EST 2015
Before waiting Mon Dec 14 15:50:39 EST 2015
Done waiting Mon Dec 14 15:51:34 EST 2015
そのため、「sleep echo $(( ( RANDOM % 30 ) + 1 ))」コマンドを、ターミナル/シェル上で正確に毎分実行されるものに置き換えてください。別のスケジュールが必要な場合は、必要なもので「60」秒を変更してください。
デバッグ行のない短いバージョン:
while ( true ); do
before=`date +%s`
sleep `echo $(( ( RANDOM % 30 ) + 1 ))` # Place you command here
after=`date +%s`
DELAY=`echo "60-($after-$before)" | bc`
sleep $DELAY
done
watch -n 1 'echo $COLUMNS'とwatch -n 1 echo $COLUMNS、あなたの端末のサイズを変更する-前者は毎秒展開されているが、後者は一度しか展開される前にwatch開始されます。