書かれたものですLinuxでシステム運用をしていると、数時間〜数日間に及ぶバッチ処理を実行することがあります。手動でプログラムを起動する場合にディスプレイの前にずっと付きっきりでは過労死まっしぐらです。うっかりTerminalを閉じてしまうと大惨事になってしまうため通常はバックグラウンドで実行します。その際の具体的なコマンドは以下の通り。コマンドの最後に&を付けるだけでバックグラウンドで実行してくれます。これだけだとTerminalを閉じてしばらくすると自動的にプログラムも終了してしまいます。付けることで強制終了を防ぐことができます。いうファイル名で記録されます。コマンドの実行が終了すると以下のような通知が来ます。参考ページ基本的な原理なぜTerminalを閉じると死ぬの?例えばSSHで接続した先のサーバで以下のコマンドを実行したとき、プロセスは以下のようになります。sshdサーバに接続するとその接続を管理するためのプロセスが作成され、そのプロセスがシェル(この場合はBash)を実行するためのプロセスを作成し、更にコマンド実行するためのプロセスを作成するという階層構造(親子関係)になります。この時にSSHの接続が切れると、コマンドが実行されている親のプロセスもろとも死んでしまうというわけです。具体的には実行中のコマンドに対してTerminalが切断された際に「SIGHUP」と呼ばれる合図が送られ、それを受け取ったコマンドは通常その場で終了します。この合図のことをシグナルと呼びます。nohupを通すとなぜ死ないの?nohupコマンドはSIGHUPを無視するためです。Termilalを2つ立ち上げそれぞれSSHでサーバへ接続します。&を実行し、もう片方ではhtopコマンドなどでプロセスの様子を観察します。nohupで実行していた方のSSH接続を切断すると、以下のようにSSH関係のプロセスは終了しましたがsleepコマンド自体は引き続き実行が続いていることを確認できました。人間である以上ついついうっかりミスをしてしまうもの。リカバリは簡単にできるので二次災害を起こさないよう落ち着いて実行します。状態に応じてこれらを使い分けます。冒頭に「nohup」をつけ忘れた場合はdisownコマンド一発です。最後に「&」をつけ忘れた場合は2つのコマンドを打ちます。&と同じ状態にできます。disownその他nohup.log以外のファイルに記録するリダイレクトするだけです。標準出力の場合は以下の通り。標準エラー出力も同様です。標準出力と同時に出力する場合は後者になります。nohupコメントコメント欄は休止中です。お問い合わせはこちらからどうぞ。ご質問はTwitterにリプを投げてください。このブログを応援するお寄せいただいたお気持ちは全額サーバ代や次の記事を執筆するための原資として活用させていただいております。この記事が参考になった場合などぜひご検討ください。PayPalで300円支払う※金額は任意で変更できます。自宅警備がてらゲームのお仕事や講師などしてご飯を食べてます。reserved.コメントを読み込み中...コメントをどうぞメール名前サイト。