A system administrator often needs to run a command repeatedly in a certain periods of time. Often such tasks can be easily completed with simple cron commands. In most of the cases this should work, but the shortest period which you can run cron command is every 1 minute. Believe it or not, in many cases this is too slow.

このチュートリアルでは、top コマンド(プロセスとメモリの使用状況を継続的に監視)と同様に、特定のコマンドを連続して実行状態に保つための簡単なスクリプト技術を学びます。デフォルトでは、3秒ごとに監視します。
こうした頻繁なコマンドの実行が必要な理由については議論しません。日常の仕事や家庭でのPCやノートパソコンで、それぞれ異なる理由があると考えています。
1. watch コマンドを使用する
Watchは、Linux コマンドであり、定期的にコマンドやプログラムを実行し、出力を画面に表示します。つまり、プログラムの出力をリアルタイムで見ることができます。デフォルトでは、watch はコマンド/プログラムを2秒ごとに再実行します。この間隔は簡単に変更して、要件に合わせることができます。
メモリ使用状況を監視する
「Watch」は非常に簡単に使用できます。テストするためには、Linux ターミナルをすぐに起動して、次のコマンドを入力します:
# watch free -m
上記のコマンドは、システムの空きメモリをチェックし、free コマンドの結果を2秒ごとに更新します。

上記の出力に示されているように、ヘッダーがあり、左から右に情報が表示されています。更新間隔、実行されているコマンド、現在の時刻です。このヘッダーを非表示にする場合は、-t
オプションを使用できます。
次の論理的な質問は、実行間隔をどのように変更するかです。そのために、-n
オプションを使用できます。このオプションは、コマンドが実行される間隔を指定します。この間隔は秒単位で指定されます。例えば、script.sh
ファイルを10秒ごとに実行したい場合は、次のようにします:
# watch -n 10 script.sh
上記のようにコマンドを実行する場合は、スクリプトが配置されているディレクトリにcd
するか、そのスクリプトへのフルパスを指定する必要があります。cdコマンドの例15を学ぶ
watchコマンドの他の便利なオプションは次のとおりです:
-b
– コマンドの終了がゼロ以外の場合にビープ音を生成します。-c
– ANSIカラーシーケンスを解釈します。-d
– コマンド出力の変更を強調表示します。
ログインユーザー、稼働時間、および平均負荷を監視する
ログインユーザー、サーバーの稼働時間、および平均負荷の出力を数秒ごとに連続して監視したい場合は、次のコマンドを使用します:
# watch uptime

コマンドを終了するには、CTRL+C
を押します。
ここでは、'uptime'
コマンドがデフォルトで2秒ごとに実行され、更新された結果が表示されます。
コピーコマンドの進行状況を監視
Linuxでcp
コマンドを使用してファイルを1か所から別の場所にコピーする際、データの進行状況が表示されません。コピーされているデータの進行状況を確認するには、リアルタイムでディスク使用量を確認するdu -sコマンドと一緒にwatchコマンドを使用できます。
# cp ubuntu-15.10-desktop-amd64.iso /home/tecmint/ & # watch -n 0.1 du -s /home/tecmint/ubuntu-15.10-desktop-amd64.iso

上記のプロセスが複雑すぎると思われる場合は、進捗状況が表示されるAdvance copyコマンドを使用することをお勧めします。
2. sleepコマンドの使用
Sleepはシェルスクリプトのデバッグによく使用されますが、他にも多くの有用な目的があります。例えば、for
またはwhile
ループと組み合わせると、素晴らしい結果が得られます。
Bashスクリプトが初めての場合は、bashループに関するガイドをこちらで確認できます。
"sleep"
コマンドについて初めて聞く場合は、指定された時間だけ何かを遅らせるために使用されます。スクリプトでは、コマンド1を実行し、10秒待ってからコマンド2を実行するように指定できます。
上記のループを使用すると、bashにコマンドを実行し、N秒待機してからコマンドを再実行するよう指示できます。
以下に、両方のループの例を示します:
forループの例
# for i in {1..10}; do echo -n "This is a test in loop $i "; date ; sleep 5; done
上記のワンライナーは、echoコマンドを実行し、現在の日付を10回、実行の間に5秒間の休止時間を設定して表示します。
以下はサンプル出力です:
This is a test in loop 1 Wed Feb 17 20:49:47 EET 2016 This is a test in loop 2 Wed Feb 17 20:49:52 EET 2016 This is a test in loop 3 Wed Feb 17 20:49:57 EET 2016 This is a test in loop 4 Wed Feb 17 20:50:02 EET 2016 This is a test in loop 5 Wed Feb 17 20:50:07 EET 2016 This is a test in loop 6 Wed Feb 17 20:50:12 EET 2016 This is a test in loop 7 Wed Feb 17 20:50:17 EET 2016 This is a test in loop 8 Wed Feb 17 20:50:22 EET 2016 This is a test in loop 9 Wed Feb 17 20:50:27 EET 2016 This is a test in loop 10 Wed Feb 17 20:50:32 EET 2016
echoおよびdateコマンドを独自のコマンドやスクリプトに変更し、必要に応じてスリープ間隔を変更できます。
whileループの例
# while true; do echo -n "This is a test of while loop";date ; sleep 5; done
以下はサンプル出力です:
This is a test of while loopWed Feb 17 20:52:32 EET 2016 This is a test of while loopWed Feb 17 20:52:37 EET 2016 This is a test of while loopWed Feb 17 20:52:42 EET 2016 This is a test of while loopWed Feb 17 20:52:47 EET 2016 This is a test of while loopWed Feb 17 20:52:52 EET 2016 This is a test of while loopWed Feb 17 20:52:57 EET 2016
上記のコマンドは、ユーザーによって停止または中断されるまで実行されます。バックグラウンドで実行されているコマンドを実行する必要があり、cronに依存したくない場合に便利です。
重要: 上記の方法を使用する際には、コマンドが次の実行前に十分な時間を確保するように十分に長い間隔を設定することを強くお勧めします。
結論
このチュートリアルのサンプルは便利ですが、cronユーティリティを完全に置き換えるものではありません。どちらが自分にとってより良いかを見つけるのはあなた次第ですが、両方のテクニックの使用を分ける必要があるとしたら、次のように言います:
- システム再起動後も定期的にコマンドを実行する必要がある場合は、cronを使用してください。
- このチュートリアルで説明されている方法を使用して、現在のユーザーセッション内で実行されるプログラム/スクリプトのために。いつものように、質問やコメントがあれば、以下のコメントセクションに送信することをためらわないでください。
Source:
https://www.tecmint.com/run-repeat-linux-command-every-x-seconds/