Linuxバックグラウンド運転管理

4678 ワード

バックグラウンド運転管理


1)Linuxは、実行中のタスクを簡単にスケジュールできるfgコマンドとbgコマンドを提供します.
フロントで実行されているプログラムに時間がかかると仮定しますが、他のことをする必要がある場合は、Ctrl+Zを使用してプログラムを掛け、システムのヒントを見ることができます.
    [1]+ Stopped /root/bin/rsync.sh 

その後、プログラムをバックグラウンドにスケジューリングして実行することができます:(bgの後ろの数字はジョブ番号です)
    #bg 1[1]+ /root/bin/rsync.sh & 

ジョブコマンドを使用して、実行中のタスクを表示します.
    #jobs[1]+ Running /root/bin/rsync.sh & 

フロントに戻して実行したい場合は、次の操作を行います.
    #fg 1/root/bin/rsync.sh 

これで、コンソールでこのタスクが完了するのを待つしかありません.
  :

&           
ctrl+z            

jobs         

fg %jobnumber             

bg %jobnumber           

2) &
Linuxでは、フロントでジョブを実行すると、端末がそのジョブに占有される.バックグラウンドでジョブを実行すると、端末を占有しません.&コマンドを使用して、ジョブをバックグラウンドに配置して実行できます.実際には、コマンドをジョブキューに入れます.
$ ./test.sh & [1] 17208 $ jobs -l [1]+ 17208 Running ./test.sh & 

バックグラウンドでジョブを実行するときは、ユーザーのインタラクティブなコマンドをバックグラウンドで実行しないでください.そうすれば、あなたの機械はそこで馬鹿になるからです.ただし、ジョブがバックグラウンドで実行されると、結果が画面に出力され、作業が妨げられます.バックグラウンドで実行されるジョブに大量の出力が発生する場合は、次の方法で出力をファイルにリダイレクトしたほうがいいです.
command >out.file 2>&1 & 

上記の例では、2>&1は、すべての標準出力とエラー出力がoutと呼ばれるものにリダイレクトされることを示す.fileのファイルにあります.プロセスを正常にコミットすると、プロセス番号が表示され、プロセスを監視したり、殺したりすることができます.
例:httpdという名前を検索する.confのファイルは、すべての標準出力とエラー出力をfindにリダイレクトします.dtのファイル:

find /etc/httpd/ -name "httpd.conf" -print >find.dt 2>&1 & [2] 7832


コマンドが正常にコミットされた後、システムはプロセス番号7832を与えた.
すでにフロントで実行するコマンドについては、バックグラウンドで実行を再開し、まずctrl+zを押す実行したプロセスを一時停止し、bgコマンドを使用して停止したジョブをバックグラウンドで実行する、例えばフロントで実行するtesh.sh ctrl+zを使用して掛けます.
$ ./test.sh [1]+ Stopped ./test.sh $ bg %1 [1]+ ./test.sh & $ jobs -l [1]+ 22794 Running ./test.sh & 

しかし、上からバックグラウンドで実行されるプロセスの場合、親プロセスは現在の端末shellのプロセスであり、親プロセスが終了すると、すべてのサブプロセスにhangup信号が送信され、サブプロセスはhangupを受信した後も終了します.shellを終了するときにプロセスを続行する場合は、nohupを使用してhangup信号を無視するか、setsidを使用して親プロセスをinitプロセス(プロセス番号1)に設定する必要があります.
$ echo $$21734 $ nohup ./test.sh & [1] 29016 $ ps -ef | grep test 515 29710 21734 0 11:47 pts/12 00:00:00 /bin/sh ./test.sh 515 29713 21734 0 11:47 pts/12 00:00:00 grep test $ setsid ./test.sh & [1] 409 $ ps -ef | grep test 515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh 515 413 21734 0 11:49 pts/12 00:00:00 grep test 

上記の実験では,nohup/setsidと&を用いてプロセスをバックグラウンドで実行し,現在のshell終了の影響を受けないことを示した.では、バックグラウンドで実行されているプロセスについては、どうすればいいのでしょうか.disownコマンドを使用できます.
$ ./test.sh & [1] 2539 $ jobs -l [1]+ 2539 Running ./test.sh & $ disown -h %1 $ ps -ef | grep test 515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh 515 2542 21734 0 11:52 pts/12 00:00:00 grep test 

もう1つの方法は、プロセスをsubshellで実行してもsetsidと同じです.コマンドをかっこ()で囲みます.
$ (./test.sh &) $ ps -ef | grep test 515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh 515 12483 21734 0 11:59 pts/12 00:00:00 grep test 

もう1つのより強力な方法はscreenを使用して、まずブレークモードの仮想端末を作成し、-rオプションでこの仮想端末を再接続し、その中で実行される任意のコマンドはnohupの効果を達成することができ、これは複数のコマンドがバックグラウンドで連続的に実行する必要がある場合に便利です.
$ screen -dmS screen_test $ screen -list There is a screen on: 27963.screen_test (Detached) 1 Socket in /tmp/uscreens/S-jiangfeng. $ screen -r screen_test 

3) nohup
プロセスを実行しており、アカウントを終了してもプロセスが終了しないと判断した場合は、nohupコマンドを使用します.このコマンドは、アカウントを終了した後、適切なプロセスを実行し続けることができます.Nohupとは掛けないという意味です(no hang up).このコマンドの一般的な形式は、nohup conmmand&
Nohupコマンドを使用してジョブをコミットと、デフォルトではジョブのすべての出力がnohupという名前にリダイレクトされます.outのファイルには、出力ファイルが別途指定されていない限り、
nohup command > myout.file 2>&1 

上記の例では、出力はmyoutにリダイレクトする.fileファイルにあります.
4)screenを使用してコマンドを実行する:nohupと&記号でバックグラウンドでコマンドを実行した後、ログインを終了しても、このコマンドはずっと実行されます.ただし、このセッションに再接続することはできません.このセッションに再接続するには、screenコマンドを使用して、前の記事で説明しました.
Linux screen                   。             ,               。

5)atを用いて1つのコマンドをバッチとして実行する
atコマンドを使用すると、指定した日時でコマンドを実行できます.たとえば、明日の午前10時にバックグラウンドでバックアップスクリプトを実行し、次のコマンドを実行します.
$ at -f backup.sh 10 am tomorrow 

バッチ・モードで特定のタスクを実行するには、いくつかのオプションを有効にする必要があります.次の記事では、詳細に説明します.
How To Capture Unix Top Command Output to a File in Readable FormatUnix bc Command Line Calculator in Batch ModeHow To Execute SSH and SCP in Batch Mode (Only when Passwordless login is enabled)

6)watchを使用して1つのコマンドを連続的に実行する
一定の間隔でコマンドを実行するには、次のようにwatchコマンドを使用します.
$ watch df -h 

7)プロセスを殺す
起動したプログラムを殺すのは普通の方法と同じです.
pkill -9 namekillall namekill pid