nohup ユーティリティは、ログアウト後もコマンドが実行され続けるようにコマンド ラインを実行します。つまり、nohup はプロセスに SIGHUP シグナルを無視させます。ローカル シェルの構成方法によっては、nohup なしで開始され、バックグラウンドで実行されているプロセスが、ログアウト時に強制終了される場合があります。
nohup コマンドを実行するための構文
nohup コマンドを実行するための基本的なコマンド構文は次のとおりです。
# nohup command_with_options &
で特に指定しない限り、ジョブからの出力はすべて「 nohup.out 」というファイルにリダイレクトされます。
# nohup command > myout.file 2>&1
これにより、すべての出力がファイル myout.file に送信されます。
nohup コマンドの出力を保存する
nohup を使用して実行するコマンドからの出力をリダイレクトしない場合、標準出力と標準エラーの両方が nohup.out という名前のファイルに送信されます。 作業ディレクトリにあります。作業ディレクトリへの書き込み権限がない場合、nohup は出力を ~/nohup.out に送信します。 .
上記のコマンドの構文で示したように、指定した他のファイルに出力を送信することもできます。
例
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 は電話を切らないことを意味します .