システム管理者は、特定の期間にコマンドを繰り返し実行する必要があることがよくあります。多くの場合、このようなタスクは単純なcronコマンドで簡単に完了できます。ほとんどの場合、これは機能するはずですが、cronコマンドを実行できる最短の時間は1分ごとです。信じられないかもしれませんが、多くの場合、これは遅すぎます。
このチュートリアルでは、デフォルトで3秒ごとにtopコマンド(プロセスとメモリ使用率を継続的に監視)と同様に、継続的に実行されている状態で特定のコマンドを監視または監視するための簡単なスクリプト手法を学習します。
理由、コマンドを頻繁に実行する必要がある理由については、ここで説明します。日常の仕事でも、自宅のPCやラップトップでも、その理由は人それぞれだと思います。
1。ウォッチコマンドを使用
見る は、コマンドまたはプログラムを定期的に実行できるLinuxコマンドであり、画面に出力も表示します。これは、プログラムの出力を時間内に確認できることを意味します。デフォルトでは、watchは2秒ごとにコマンド/プログラムを再実行します。間隔は、要件に合わせて簡単に変更できます。
メモリ使用量の監視
「ウォッチ」は非常に使いやすく、テストするには、Linuxターミナルをすぐに起動して、次のコマンドを入力できます。
# watch free -m
上記のコマンドは、システムの空きメモリをチェックし、2秒ごとにfreeコマンドの結果を更新します。
上記の出力に見られるように、更新間隔、実行中のコマンド、現在の時刻に関する情報を(左から右に)表示するヘッダーがあります。このヘッダーを非表示にする場合は、-t
を使用できます オプション。
次の論理的な質問は、実行間隔を変更する方法です。そのために、-n
を使用できます オプション。コマンドが実行される間隔を指定します。この間隔は秒単位で指定されます。したがって、script.sh
を実行するとします。 10秒ごとにファイルを作成します。次のように実行できます:
# watch -n 10 script.sh
cd
する必要があります。 スクリプトが配置されているディレクトリ(Learn 15 cdコマンドの例を学ぶ)に移動するか、そのスクリプトへのフルパスを指定します。
ウォッチコマンドの他の便利なオプションは次のとおりです。
-
-b
–コマンドの終了がゼロ以外の場合、ビープ音を鳴らします。 -
-c
–ANSIカラーシーケンスを解釈します。 -
-d
–コマンド出力の変更を強調表示します。
ログインしているユーザー、稼働時間、平均負荷を監視する
ログインしたユーザー、サーバーの稼働時間、負荷の平均出力を数秒ごとに継続的に監視し、次のコマンドを使用するとします。
# watch uptime
コマンドを終了するには、CTRL+C
を押します。 。
ここでは、'uptime'
コマンドが実行され、デフォルトで2秒ごとに更新された結果が表示されます。
コピーコマンドの進行状況を監視する
Linuxでは、cp
を使用してファイルをある場所から別の場所にコピーします コマンドの場合、データの進行状況は表示されません。コピーされているデータの進行状況を確認するには、watch
を使用できます。 リアルタイムでディスク使用量をチェックするdu-sコマンドと一緒にコマンド。
# cp ubuntu-15.10-desktop-amd64.iso /home/tecmint/ & # watch -n 0.1 du -s /home/tecmint/ubuntu-15.10-desktop-amd64.iso
上記のプロセスが複雑すぎて実行できないと思われる場合は、コピー中のデータの進行状況を表示するAdvancecopyコマンドを実行することをお勧めします。
2。スリープコマンドを使用する
スリープはシェルスクリプトのデバッグによく使用されますが、他にも多くの便利な目的があります。たとえば、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
上記の1つのライナーは、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
エコーを変更できます および日付 独自のコマンドまたはスクリプトを使用してコマンドを実行し、必要に応じてスリープ間隔を変更します。
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を使用してください。
- 現在のユーザーセッション内で実行することを目的としたプログラム/スクリプトには、このチュートリアルで説明されている方法を使用してください。
いつものように、質問やコメントがある場合は、下のコメントセクションで遠慮なく送信してください。