Linuxのnohupコマンドでプロセスをバックグラウンド実行する方法【SSH切断後も継続】
このガイドでは、nohupコマンドを使ってプロセスをバックグラウンドで実行し、ログアウトや接続の切断後も処理を継続させる方法を解説します。
nohupとは?
リモートサーバーでの作業が多い方なら、SSH接続を閉じた後も実行し続けたいプロセスに遭遇することがよくあるでしょう。たとえば、ログファイルを解析するシェルスクリプトや、大規模なMySQLデータベースのリストアなどが挙げられます。
そんなときに活躍するのが、Linuxのコマンドラインユーティリティ「nohup」です。nohupは「no hangup(ハングアップしない)」の略で、「ハングアップシグナルを無視する」という意味を持っています。ハングアップシグナルとは、ログアウトした際に発生するシグナルのことです。
nohupを使えば、サーバーにログインしてプロセスを起動したままログアウトしても、プロセスは実行され続けます。再度ログインしたときに、まだ実行中であればそのプロセスにアクセスすることも可能です。
nohupの基本構文
nohupの基本的な構文は以下のとおりです。
# nohup [コマンド] &
「[コマンド]」の部分には、実行したいシェルスクリプト名やコマンドを指定します。末尾の「&」を付けることで、コマンドやスクリプトがバックグラウンドプロセスとして実行されます。
実践例:MySQLデータベースのバックアップ
ここでは、リモートサーバー上の大規模なMySQLデータベースをバックアップする例を紹介します。
手順1:SSHでサーバーにログイン
まず、SSHでリモートサーバーに接続します。
# ssh calvin@sevenacross.com
手順2:nohupでコマンドを実行
次に、「mysqldump -ucalvin -phobbes largedatabase > largedatabase.db」というコマンドをnohupモードで実行します。コマンドの先頭に「nohup」を付け、末尾に「&」を追加するだけです。
# nohup mysqldump -ucalvin -phobbes largedatabase > largedatabase.db &
[1] 3999
# nohup: appending output to `nohup.out'
出力は2行あります。1行目の「3999」は、起動したばかりのプロセスのプロセスID(PID)です。2行目の「nohup: appending output to `nohup.out'」というメッセージは、通常ターミナルに表示されるはずの出力が、コマンドを実行したディレクトリ内の「nohup.out」というファイルに書き込まれることを示しています。
プロセスが実行中かどうかを確認する
プロセスIDを使って、実行中の全プロセスを検索すれば、プロセスがまだ稼働しているかどうかを確認できます。
# ps -ef | grep 3999
calvin 3999 29848 0 18:42 ? 00:00:00 /usr/bin/mysqldump
calvin 6575 31852 0 18:44 pts/2 00:00:00 grep 3999
実行完了の確認
プロセスの実行が完了すると、コマンドラインに次のような出力が表示されます。
[1]+ Done nohup mysqldump -ucalvin -phobbes largedatabase > largedatabase.db
nohup.outファイルでエラーをチェック
実行中に出力されたエラーやメッセージがないか、「nohup.out」ファイルを確認しておきましょう。ファイルが空のままであれば問題ありません。それは、プロセスの実行中に何もメッセージが出力されなかったことを意味します。
補足:出力先ファイルを指定するテクニック
デフォルトでは出力が「nohup.out」に保存されますが、リダイレクトを使えば任意のファイルに変更できます。
# nohup [コマンド] > mylog.txt 2>&1 &
このように書くことで、標準出力とエラー出力の両方が「mylog.txt」に記録されるため、ログ管理がより便利になります。
バックグラウンドでのプロセス実行方法をマスターしたら、ほかのLinuxの便利なヒントやテクニックもぜひ学んでみてください。
-
Linuxでプロセスを強制終了する方法!top・ps・killコマンドの使い方を徹底解説
Linuxには、プロセスを強制終了(キル)するためのさまざまな方法があります。このチュートリアルでは、動作がおかしくなったプロセスを見つけて終了させる方法を解説します。 プロセスは簡単に「孤児」になってしまうことがあります。意図的であろうとなかろうと、親プロセスがクラッシュすると、子プロセスだけが取り残されて実行され続けることがあります。また、親プロセスが完了した子プロセスを回収(reap)できず、ゾンビプロセスになってしまうケースもあります。 どちらの状態のプロセスも放置されたままでは動けず、手動での介入が必要です。そこで登場するのがジョブコントロールです。それでは、壊れたプロセスを終了させ
-
WSLでWindows 10・11上にLinux環境を構築する方法|インストールからGUIアプリ起動まで
はじめに筆者はOS関連の学習でWSL(Windows Subsystem for Linux)を長年利用しています。仮想マシンの構築やデュアルブートといった複雑な準備なしに、Windows上で直接Linuxコマンドを実行できる手軽さが大きな魅力です。この記事を読み終える頃には、WindowsからそのままLinuxコマンドを実行できるようになっているはずです。Windows上でLinuxコマンドを実行している様子前提条件WSLを快適に運用するには、Windows 11へのアップグレードをおすすめします。Windows 10でもWSLは利用できますが、筆者の経験上、Windows 11の方がはるか