nohupコマンドの使い方!ログアウト後もLinuxでコマンドを動かす方法
生徒
「先生、Linuxで長い作業を実行している途中でログアウトしても、その作業を続けたいときはどうすればいいですか?」
先生
「その場合はnohupコマンドを使うと便利です。nohupはログアウトしてもコマンドの実行を続けられるコマンドです。」
生徒
「ログアウトしても作業が止まらないなんてすごいですね。でも、どうやって使うんですか?」
先生
「簡単です。基本はnohup コマンド &の形で書くだけです。少しずつ実例を見ながら覚えていきましょう。」
1. nohupコマンドとは?
nohupコマンドは、Linuxでログアウトしても処理を停止させずに実行できるコマンドです。通常、ターミナルを閉じると、バックグラウンドで動いていた処理も停止してしまいます。しかし、nohupを使うことでログアウトしても処理を継続できます。
これは、長時間実行する処理やサーバーでの定期作業などで非常に便利です。Windowsで言うと、PCをシャットダウンせずに「アプリをバックグラウンドで実行し続ける」イメージに近いです。
2. nohupコマンドの基本的な使い方
基本的な書き方は以下の通りです。
nohup コマンド &
ポイントは二つあります。
&をつけることで、コマンドをバックグラウンドで実行するnohupでログアウト後もプロセスを停止させない
例えば、テキストの大きなファイルをコピーする処理を実行するときは以下のように書けます。
nohup cp largefile.txt /backup/ &
この状態でターミナルを閉じてもコピー処理は続行されます。
3. nohupコマンドの出力先について
nohupで実行すると、標準出力やエラー出力は自動的にnohup.outというファイルに保存されます。つまり、実行結果やエラーをターミナル上で確認できなくても、後から内容を確認できます。
nohup ls -l /var/log/ &
この場合、結果はカレントディレクトリのnohup.outに書き込まれます。
cat nohup.out
total 4096
-rw-r--r-- 1 user user 1234 Mar 23 09:00 syslog
-rw-r--r-- 1 user user 5678 Mar 23 09:00 auth.log
4. nohupコマンドと&の組み合わせ
nohupだけでもログアウト後にプロセスは続きますが、&を組み合わせるとターミナルを使いながら他の作業もできるので便利です。
nohup python3 long_script.py &
上記の例では、Pythonスクリプトをバックグラウンドで実行しつつ、ターミナルで別のコマンドを実行できます。
5. nohupコマンドで出力ファイルを指定する
出力先を明示的に指定したい場合は、リダイレクト(>)を使います。
nohup python3 long_script.py > output.log 2>&1 &
ここで、output.logは出力ファイル、2>&1はエラー出力も同じファイルにまとめる意味です。こうすることで後から実行結果を確認しやすくなります。
6. 実行中のnohupプロセスを確認する
nohupで実行したプロセスは通常のプロセスと同じく確認できます。psやjobsコマンドを使います。
ps aux | grep long_script.py
user 12345 0.0 0.1 23456 1234 pts/0 S 09:00 0:01 python3 long_script.py
これでプロセスID(PID)がわかり、必要に応じて停止も可能です。
7. nohupの注意点と便利な使い方
nohupを使う際の注意点は、標準出力やエラー出力をきちんと確認することです。大きな処理ではnohup.outが膨大になる場合があります。
また、サーバーで定期的に実行する場合は、cronと組み合わせるとさらに便利です。
nohup bash backup.sh > backup.log 2>&1 &
この例では、バックアップスクリプトをログファイル付きでバックグラウンド実行しています。
8. nohupと似たコマンドとの違い
nohupに似たコマンドとしてscreenやtmuxがあります。これらは端末を分離して複数作業を行うツールで、nohupより柔軟に操作できます。
ただし、シンプルに「ログアウトしてもコマンドを止めない」だけならnohupが最も簡単です。
9. 練習例:nohupで大きなファイルをコピーする
例えば大容量の動画ファイルをバックアップする場合、以下のように実行します。
nohup cp movie.mp4 /mnt/backup/ > copy.log 2>&1 &
ログアウトしてもコピーは続行され、コピー結果はcopy.logで確認できます。
まとめ
今回はLinuxで長時間の処理やサーバー上の作業をログアウト後でも継続して実行できるnohupコマンドの使い方について詳しく学びました。nohupは、通常ターミナルを閉じると停止してしまうプロセスを維持できる便利なツールで、バックグラウンドでの作業や大容量ファイルのコピー、長時間実行するPythonスクリプトなどに特に有効です。基本的な使い方はnohup コマンド &の形で書くだけで、これによりターミナルを使いながら他の作業を行うことも可能です。また、標準出力やエラー出力は自動的にnohup.outに保存されますが、リダイレクトを使用することで任意のログファイルに出力をまとめることもできます。
さらに、nohupで実行したプロセスの確認はpsやjobsコマンドで行うことができ、必要に応じてkillコマンドで停止することも可能です。サーバーで定期的に処理を行う場合はcronと組み合わせることで自動化ができ、より効率的な運用が実現します。nohupはシンプルで習得しやすく、screenやtmuxのような複雑なツールを使わなくても、単純にログアウト後もプロセスを継続させたい場合には最適です。
練習として、大きなファイルのコピーや長時間実行するスクリプトをnohupでバックグラウンド実行する方法を確認しました。ログファイルを指定して出力を確認することで、途中経過やエラーの有無を後から確認できる点も理解しました。このようにnohupを正しく活用することで、Linuxでの作業効率やサーバー運用の安定性が格段に向上します。
まとめると、nohupコマンドはログアウト後でもプロセスを停止させずに実行可能なコマンドであり、出力管理やバックグラウンド実行、ログの確認といったポイントを押さえて使うことで、日常的なLinux作業やサーバー運用を安全かつ効率的に行うことができます。
サンプルコード:nohupでスクリプトをバックグラウンド実行
nohup python3 long_script.py > output.log 2>&1 &
cat output.log
処理開始: 09:00
データ読み込み完了
計算処理中...
処理終了: 10:45
生徒
「先生、nohupコマンドを使えば、ログアウトしても処理が止まらないのは理解できました。でも、出力を確認する場合はどうしたらいいですか?」
先生
「その場合は、nohupの標準出力とエラー出力をリダイレクトしてログファイルに保存するのが便利です。例えばnohup python3 long_script.py > output.log 2>&1 &のように書くと、エラーも含めてoutput.logで確認できます。」
生徒
「なるほど、これなら後から実行結果をチェックできますね。他の作業をしながらも処理を続けられるので便利です。」
先生
「そうです。さらにプロセスの確認にはps aux | grep スクリプト名やjobsを使えば、PIDを調べて必要なら停止することもできます。長時間作業やサーバー管理に非常に役立つコマンドです。」
生徒
「わかりました!nohupを使いこなせば、Linuxでの作業効率がかなり上がりそうです。」
先生
「その通りです。まずは小さなスクリプトやファイルコピーで練習して、nohupの挙動に慣れることが大切です。」