こんにちは、フルスタックエンジニアのryuです。
今回の記事では、バックグラウンドでコマンドやスクリプトを実行する方法を解説します。Linuxのコマンドを永続的にバックグラウンドで実行させたいことがあると思います。その場合は、コマンドの末尾に”&”アンパサントをつけます。また、セッションが終了しても実行を続けたい場合は、nohupコマンドを使用しましょう。それぞれの使い方について詳しく解説します。
目次
【Linux】バックグラウンドでコマンドやスクリプトを実行する方法を解説
バックグラウンドでコマンドやスクリプトを実行する方法は以下の通りです。
- コマンドの末尾に&をつける
やり方についてさらに解説します。
コマンドの末尾に&をつける
まずは、コマンドの末尾に&をつける方法です。
コマンドの末尾に&
を追加する方法は、Linuxシェルでタスクをバックグラウンドで実行するためのシンプルで便利な方法です。この方法を使用すると、ターミナルセッションをブロックせずに他のコマンドを実行できます。
例えば、以下のように実行します。
tar -czvf archive.tar.gz /path/to/files &
上記の例は、アーカイブファイルを作成する際に、バックグラウンドで処理を行なっています。
tarコマンドを使って一度に多くのファイルを圧縮すると、処理に時間がかかり、他の作業ができなくなります。ここで、&を使ってバックグラウンドでコマンドを実行することで他の作業ができるようになります。
tarコマンドの使い方についてはこちらの記事をご覧ください。
参考:【Linux】tarコマンドの使い方は?ファイルのアーカイブと展開するコマンド
バックグランドで実行されているかどうかの確認方法
末尾に&をつけるとバックグランドでコマンドが実行されます。では、どのように確認すればよいのでしょうか?
jobsコマンドで確認
jobs
コマンドは、バックグラウンドで実行されているジョブをリスト表示します。ターミナルで単にjobs
と入力するだけで、バックグラウンドで実行中のジョブが表示されます。ジョブには番号が割り当てられ、その番号を使用してジョブを操作できます。
コマンドは以下のように実行します。
jobs
出力結果の例は以下の通りです。
- Running command-1 &
+ Running command-2 &
バックグラウンドで実行されているコマンドが表示されます。
psコマンド
psコマンドを使っても確認することができます。
以下のようにgrepコマンドと組み合わせて検索しながら確認します。
ps aux | grep "command名"
psコマンドは、システム全体で実行中のプロセスを表示できます。バックグラウンドで実行中のプロセスも含まれます。
psコマンドの使い方については、こちらの記事で詳しく解説しております。
参考:【Linux】プロセスを確認するpsコマンドの使い方解説!オプションなども併せて解説
nohupコマンドを使って、セッションが終了してもバックグラウンドで実行させる
先ほどまで、&を使ってコマンドやスクリプトをバックグラウンドで実行してきました。
&だけを付けてコマンドを実行すると、SSHやターミナルへの接続が切れた場合、バックグラウンド実行も停止してしまいます。
そこでnohupコマンドを使うことで、セッションが終了してもバックグラウンドで実行されるようになります。
nohupコマンドの使い方
nohup
を使用してコマンドをバックグラウンドで実行するには、次のように実行します。
nohup [command名] &
例えば、my_script.shというスクリプトを実行させる場合は以下のように実行します。
nohup ./my_script.sh &
これにより、my_script.sh
がバックグラウンドで実行され、ターミナルセッションを閉じてもプロセスが続行します。
nohup
の出力を保存する方法
フォルトでは、nohup
は標準出力と標準エラーをnohup.out
というファイルにリダイレクトします。ファイル名を指定して出力を保存することもできます。
nohup ./my_script.sh > my_output.log 2>&1 &
このコマンドでは、標準出力と標準エラーをmy_output.log
というファイルにリダイレクトして保存します。
参考:【Linux】標準入力、標準出力、標準エラーとは?それぞれについて解説
参考:Linuxのコマンドラインで使う>(大なり記号)の意味とは?リダイレクト演算子の使い方について解説
nohup
ジョブの監視と終了
nohup
で実行中のジョブは、ジョブ番号とプロセスIDが表示されます。ジョブを監視したり終了したりするためには、jobs
コマンドとkill
コマンドを使用します。
まず、jobsコマンドを利用して、実行中のプロセスを表示します。
jobs
ジョブ番号を確認したら、killコマンドを使って停止させます。
kill [番号]
どのような場面でバックグラウンド実行をしたら良いのか
ここまで、バックグランド実行のやり方について解説しました。
では、どのような場面でバックグラウンド実行をしたら良いのでしょうか?いくつか実例を挙げて説明します。
長時間実行するプロセス
バックグラウンド実行は、長時間かかるタスクやプロセスに適しています。
例えば、大規模なデータベースのバックアップ、ファイルの圧縮、データの処理などが挙げられます。これらのタスクをバックグラウンドで実行することで、ターミナルセッションを閉じても処理が続行され、利用可能なシステムリソースを最大限に活用できます。
定期的なバックアップ
バックグラウンドでバックアップツールを実行することで、定期的なバックアップを簡単に自動化できます。
バックアップジョブは通常、バックグラウンドで実行され、システムの正常な稼働に干渉しません。
また、定期的なバックアップについては、cronを用いるのも一つの手段です。
参考:【Linux】crontabの設定方法を解説!定期的にジョブを実行させる方法とは?
デーモンプロセス
デーモンプロセスは、バックグラウンドで実行されるサーバーやサービスの一例です。
Webサーバーやデータベースサーバーなど、常に実行され、クライアントからのリクエストを待機するプロセスはバックグラウンドで実行されます。これらのプロセスは、システムが起動したときに自動的に開始され、システムが稼働中にもバックグラウンドで動作し続けます。
まとめ
今回の記事では、バックグラウンドでコマンドやスクリプトを実行する方法を解説しました。バックグラウンド実行は、様々な場面で応用できるので覚えておきましょう。
さらにLinuxのコマンドの学習をしたい人に向けて、InfraAcademyというインフラ学習サービスのご紹介です。
「Linuxの実践的な内容を学習したい」、「コマンドを打ちながらLinuxを学習したい」
そのようなご要望にお応えして、Linuxやネットワークが学習できるサイト「InfraAcademy」をリリースしました!
InfraAcademyの特徴は以下の通り。
- Linuxやネットワークの知識が体系的に学べる
- LINEやZoomでエンジニアに質問可能
- 全ての講座が閲覧できて、2,480円
- 購入から1週間以内であれば全額返金
Linuxの参考書を購入すると、3,000円以上するものもあります。InfraAcademyでは、2,480円でコンテンツ見放題で現役エンジニアに質問できるサービスまで付いています。
また、購入から1週間以内であれば全額返金保証もあるので安心です。
InfraAcademyでは、一部のコンテンツは無料で閲覧できるので、興味のある方はお試しください。