Linuxの上級ユーザーにとって、Linuxサービスの起動、停止、再起動は不可欠です。これらの操作により、ユーザーは各サービスの機能にアクセスできます。例えば、Webサーバーを使用するにはApacheサービスを起動する必要があり、データベースを使用するにはMySQLサービスを起動する必要があります。Linuxサービスの管理はシステムの安定性にも重要であり、システムパフォーマンスの向上にも役立ちます。
一般的に信じられていることとは異なり、Linuxでのサービスの起動、停止、再起動は比較的簡単です。ここではLinuxを例に説明しますが、Linuxサービスの起動、停止、再起動に使用するコマンドはすべて、CentOS、Ubuntu、Redhat、Fedora、Debian、その他多くのディストリビューションで実行できます。
systemctl コマンドと service コマンドの違いは何ですか?
Linux でシステム サービスを開始、停止、再起動、および管理するための一貫した方法を提供する公式の管理ツールが 2 つあります。
- システムctl
- サービス
Systemctlは、依存関係の管理、サービスの有効化/無効化、journalctlとの連携によるログ出力など、より高度な機能を提供します。Serviceはよりシンプルで、主に基本的なサービスの開始、停止、ステータスコマンドに使用されます。古いSysVinitベースのシステムでよく使用されます。
どちらを使用するかは、ディストリビューションがsystemdを使用しているかinitを使用しているかによって異なります。最近のディストリビューションのほとんどはsystemdを使用しているため、systemctlがサービスマネージャとして最適です。しかし、古い習慣はなかなか抜けないため、多くの管理者は依然として古くなったserviceコマンドを使い続けています。
幸いなことに、systemdの開発者はサービスを保持し、それをsystemctlにリダイレクトするようにしたので、systemdベースのシステムでも、基本的なタスクにはサービスを使用できます。
問題をさらに複雑にするのは、インストールしたランダムなサービスがサービスまたは systemctl ツールのいずれにも更新されていないために、/etc/rc.d (または /etc/init.d) を使用して手動で起動しなければならない場合があることです。ただし、ここで探しているのはベスト プラクティスであり、Linux でアプリケーションを起動、停止、または再起動する場合のベスト プラクティスは systemctl で始まり、systemctl で終わります。
参照: このバンドルで IT およびシステム管理者向けの Linux の使い方を学び始めましょう
Linuxサービスの開始
Apache サーバーを起動したいとします。
これを実行するには:
- ターミナルウィンドウを開きます。
- コマンドを実行します
sudo systemctl start httpd
。
このコマンドでは、
sudo
Linux に、コマンドを root ユーザーとして実行していることを伝えます。systemctl
systemd サービスを管理します。start
systemctl コマンドに Apache サービスを開始するように指示します。httpd
Apache Web サーバー サービスの名前です。
- コマンドを実行すると、次のメッセージが表示されます。
The service httpd has started successfully.
サービスがすでに実行されている場合は、次のメッセージが表示されます。
The service httpd is already running.
参照: 特定の Linux ディレクトリでターミナルを素早く開く方法
一般的なエラーメッセージ
Failed to start httpd.service. Unit httpd.service not found.
このエラーは、Apache Webサーバーパッケージがインストールされていないか、サービスユニットファイルが見つからない場合に発生します。この問題を解決するには、sudo apt install apache2(Debianベースのシステムの場合)またはsudo yum install httpd(Red Hatベースのシステムの場合)を使用してApacheパッケージをインストールしてください。
Failed to start httpd.service. Address already in use.
これは、Apacheがバインドしようとしているポート(通常はポート80)を別のプロセスが既に使用していることを示しています。競合しているプロセスを特定しsudo lsof -i:80
て停止するか、Apacheの設定ファイルでポート設定を変更してください。
Linux サービスの停止
Apache サービスを停止するには:
- ターミナルウィンドウを開く
- コマンドを実行します
sudo systemctl stop httpd
。 - 次のメッセージが表示されます。
The service httpd has been stopped successfully.
サービス (この場合は Apache) が実行されていない場合は、次のメッセージが表示されることに注意してください。
Failed to stop service httpd. Unit httpd.service is not loaded.
sudo apt install apache2
(Debian ベース) またはsudo yum install httpd
(Red Hat ベース)を使用してインストールします。
または、次のいずれかのメッセージが表示される場合があります。
Failed to stop service httpd. Unit httpd.service is not running.
これは、Apache がすでに停止していることを示しているので、アクションは必要ありません。
Failed to stop service httpd. Unit httpd.service is in a failed state.
これは、Apache でエラーが発生し、障害状態になっていることを示しています。トラブルシューティングを行うには、実行してsudo journalctl -xe
詳細なログを表示し、サービスを再起動してください。
Failed to stop service httpd. Unit httpd.service is locked.
このエラーは、別のプロセスがサービスを制御している場合に発生します。少し待ってからもう一度お試しください。または、実行中の管理タスクを確認して、ps aux | grep httpd
ロックしているプロセスを特定してください。
参照: Linux 101: Linux コマンドラインからファイルを検索する方法
Linux サービスの再起動
同じサービス (Apache) を再起動するには:
- ターミナルウィンドウを開きます。
- コマンドを実行します
sudo systemctl restart httpd
。 - サービスが再起動し、bash プロンプトに戻ります。
- 次のメッセージが表示されます。
The service httpd has been restarted successfully.
一般的なエラーメッセージ
Apache サービスが実行されていない場合は、次の出力が表示されます。
The service httpd is not running.
で直接起動することsudo systemctl start httpd
も、 でステータスを確認することもできますsystemctl status httpd
。
次のような表示も出る場合があります。
Job for httpd.service failed.
これは通常、構成または依存関係の問題を示しています。トラブルシューティングを行うには、エラーの詳細を確認しsudo journalctl -xe
、構成の問題があれば修正してください。
サービスの使用状況によるサービスの開始、停止、再起動
興味深いことに、serviceコマンドはsystemdとsystemctlに移行したディストリビューションでも引き続き機能します。つまり、Linuxでサービスを再起動する必要があるときに直感的にserviceと入力しても、Unknown command
エラーが発生しません。
参照: Googler を使用して Linux コマンドラインから Google 検索を実行する
service の場合、コマンドは systemctl にリダイレクトされます。実際、systemctl 対応のディストリビューションで service コマンドを実行すると、リダイレクト情報が明確に表示されます。

serviceコマンドの使い方はsystemctlと少し異なります。サービス名と開始、停止、再起動のオプションが入れ替わります。
sudo service httpd start
sudo service httpd stop
sudo service httpd restart
いずれの場合も、サービスはsystemctlにリダイレクトされますが、開始、停止、または再起動しようとしているサービスは成功します。
systemctl の機能について詳しく知るには、コマンド man systemctl を発行してマニュアル ページを読んでください。