nohup (「ハングアップなし」) コマンドは、ユーザーがログオフしたときにプロセスが終了するのを防ぎます。たとえば、管理者がバックアップ スクリプトを起動してシステムからログオフすると、スクリプトは実行を停止します。通常のコマンドの前に nohup コマンドを配置すると、管理者がログオフした後でもスクリプトが続行されます。
構文
nohup コマンドの構文は次のとおりです。
# nohup {command/script}
nohup コマンドの実行中に以下のエラーが発生した場合:
nohup: command not found
選択したディストリビューションに従って、以下のパッケージをインストールしてみてください:
分布 | コマンド |
---|---|
OS X | brew install coreutils |
Debian | apt-get install coreutils |
Ubuntu | apt-get install coreutils |
アルパイン | apk add coreutils |
Arch Linux | pacman -S coreutils |
カリ Linux | apt-get install coreutils |
CentOS | yum install coreutils |
Fedora | dnf install coreutils |
Raspbian | apt-get install coreutils |
例
1.出力ファイルを指定せずに nohup を実行する
例を挙げて、ログアウトした後も実際に動作し続けることをテストしてみましょう。 script.sh というスクリプトを開始します。スクリプトの内容は次のとおりです:
# cat script.sh #!/bin/sh while(true) do echo "Hello World!" sleep 10 done
nohup コマンドを使用して backgroupd でスクリプトを実行しましょう:
# nohup script.sh & [1] 179 $ nohup: appending output to `nohup.out`
上記のように、出力ファイルを指定していません。したがって、デフォルトでは、標準出力と標準エラーは、スクリプトが呼び出されたディレクトリ内の nohup.out ファイルに入ります。 179 という数字も ジョブのプロセスID(PID)を指定。この PID は、以下に示すように「ps -ef」コマンド出力で確認できます。
シェルを終了し、再度ログインして、次のコマンドを実行します:
$ ps x | grep script.sh 179 ? S N 0:01 sh /root/script.sh 506 p2 S 0:00 grep script.sh
スクリプトはまだ機能しています。 「ps -ef |」を使用します。システムが ps x をサポートしていない場合は、grep ps1」を実行します。さらに確認するために、出力ファイル nohup.out をチェックすることもできます。
# cat nohup.out Hello World! Hello World! Hello World! Hello World! ...注意 :nohup を使用して別のコマンドを実行すると、出力は既存の nohup.out ファイルに追加されます。同じディレクトリから複数のコマンドを実行する場合は注意してください。すべての出力が同じ nohup.out ファイルに送信されるため、混乱を招く可能性があります。
出力ファイルを指定して nohup を実行する
上記のスクリプトは、nohup コマンドを実行して、以下に示すようにカスタム出力ファイルを指定することもできます:
# nohup script.sh > /tmp/script.out 2>&1 [1] 14235
結論
プロセスを実行していて、その日のログアウト時までにプロセスが完了しないと思われる場合は、nohup コマンドを使用します。 Nohup は、アカウントを終了しても処理を続行します。 Nohup は電話を切らないことを意味します .