systemctlの習得:Linuxサービス管理のための必須コマンド
サービスの管理は、あらゆる最新のLinuxディストリビューションを維持するための礎石です。systemdの採用以来、systemctlコマンドはシステムおよびサービスマネージャーと対話するための普遍的なツールとなりました。新しいアプリケーションのデプロイ、障害のトラブルシューティング、あるいは起動時にサービスが正しく開始されることの確認であれ、効率的なシステム管理のためにはsystemctlを習得することが不可欠です。
このガイドでは、Linuxシステム上のサービスのステータス、起動動作、および状態を管理するために必要な、基本的なsystemctlコマンドの包括的な概要を提供します。サービスライフサイクルの制御とシステム安定性の確保のために最も頻繁に使用されるコマンドを網羅します。
systemdとsystemctlの理解
systemdは、Debian、Ubuntu、CentOS/RHEL、Fedoraなどの主要なLinuxディストリビューションのほとんどで使用されているinitシステムおよびサービスマネージャーです。これはユーザースペースを初期化し、プロセス、セッション、およびシステムサービスを管理します。
systemctlは、systemdマネージャーとそのコンポーネント(ユニット)の状態を制御および検査するために使用される主要なコマンドラインユーティリティです。バックグラウンドで実行されるプログラム(デーモン)であるサービスは、サービスユニット(通常.serviceで終わる)として管理されます。
主要コンセプト:ユニットとターゲット
この記事はサービスに焦点を当てていますが、systemctlがさまざまなユニットを管理することを覚えておいてください。
- サービスユニット (
.service): バックグラウンドプロセスの管理用(例:nginx.service)。 - ターゲットユニット (
.target): ユニットをグループ化して特定のシステム状態を表すために使用されます(例:典型的なサーバー環境を表すmulti-user.target)。
サービス制御のための必須コマンド(ランタイム状態)
これらのコマンドは、サービスが現在のアクティブなシステムセッションで実行中か停止中かを直接制御します。
1. サービスの起動
startコマンドを使用して、起動時の設定に関係なく、サービスを即座に起動します。
sudo systemctl start <service_name>.service
# 例:Apache Webサーバーの起動
sudo systemctl start apache2.service
2. サービスの停止
実行中のサービスを正常に終了するには、stopコマンドを使用します。
sudo systemctl stop <service_name>.service
# 例:MySQLデータベースサービスの停止
sudo systemctl stop mariadb.service
3. サービスの再起動
これは設定ファイルの変更後によく使用されます。サービスを停止してから、すぐに再度起動します。
sudo systemctl restart <service_name>.service
# 例:SSHデーモンの再起動
sudo systemctl restart sshd.service
4. 設定のリロード
多くのサービスはリロード操作をサポートしており、既存の接続を中断したりプロセスを完全に停止したりすることなく、新しい設定ファイルを適用します。これは完全な再起動よりも高速で、中断が少ない方法です。
sudo systemctl reload <service_name>.service
# 例:Nginx設定のリロード
sudo systemctl reload nginx.service
ヒント: 必ずサービスのドキュメントを確認してください。サービスが
reloadをサポートしていない場合は、設定変更後にrestartを使用する必要があります。
サービスの永続性のための必須コマンド(ブート状態)
サービスを起動することは「今すぐ」実行することですが、有効化または無効化することは、システムが起動する際に自動的に開始されるかどうかを制御します。
1. サービスの有効化
再起動後にサービスが自動的に開始されるようにするには、それを有効化(enable)する必要があります。これにより、systemd設定ディレクトリ(/etc/systemd/system/)に必要なシンボリックリンクが作成されます。
sudo systemctl enable <service_name>.service
# 例:PostgreSQLを起動時に開始するように有効化
sudo systemctl enable postgresql.service
2. サービスの無効化
起動時にサービスが自動的に開始されるのを防ぐには、それを無効化(disable)する必要があります。これにより、enableコマンドによって作成されたシンボリックリンクが削除されます。
sudo systemctl disable <service_name>.service
# 例:サーバー上のBluetoothサービスを無効化
sudo systemctl disable bluetooth.service
3. サービスのマスク(最終手段)
ユニットをマスクすると、手動、自動、または他のユニット依存関係によって起動できなくなります。これは通常、標準のdisableコマンドだけでは不十分な、競合する他のコンポーネントを持つシステムコンポーネントを恒久的に無効にする場合に使用されます。
sudo systemctl mask <service_name>.service
# マスクを解除するには:
sudo systemctl unmask <service_name>.service
サービスの状態と情報の確認
サービスが実行中かどうか、そしてなぜ失敗している可能性があるかを知ることは、トラブルシューティングにとって極めて重要です。
1. ステータスの確認
statusコマンドは、サービスがアクティブか、ロードされているか、プロセスID、および最新のログエントリを含め、サービスに関する詳細な即時スナップショットを提供します。
systemctl status <service_name>.service
# 例:ファイアウォールのステータスの確認
systemctl status firewalld.service
出力の解釈:
出力内の次の3つの主要な行に注目してください。
- Loaded: ユニットファイルが正しくロードされたかを示します(例:
loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled))。 - Active: 現在のランタイム状態(例:
active (running)またはfailed)を示します。 - CGroup: サービスに関連付けられたプロセスツリーを示します。
2. 起動の永続性の問い合わせ
完全なステータス出力を確認せずに、サービスが自動起動するように設定されているかどうかを確認できます。
systemctl is-enabled <service_name>.service
# 出力は 'enabled'、'disabled'、または 'masked' になります
3. journalctlを使用したログの表示
statusは最後の数行の出力を表示しますが、詳細なデバッグを行うにはjournalctlを使用する必要があります。このコマンドは、すべてのシステムおよびサービスログを収集するsystemdジャーナルを照会します。
特定のサービスに関するログを表示するには:
# 前回の再起動以降のサービスに関するすべてのログを表示
journalctl -u <service_name>.service
# リアルタイムでログを表示(tail -f のように)
journalctl -u <service_name>.service -f
# 昨日以降のログを表示
journalctl -u <service_name>.service --since "yesterday"
警告: サービスが
failedステータスを示している場合、journalctl -u <service> -r(逆順、最新のものを最初に表示)は、失敗を引き起こしたエラーメッセージを確認する最も速い方法であることがよくあります。
システム状態(ターゲット)の管理
systemctlは、主にターゲットを介してグローバルなシステム状態を管理するためにも使用されます。
1. 現在のシステム状態の表示
システムが現在どのターゲットで起動しているか(例:サーバー環境かグラフィカルデスクトップか)を確認するには:
systemctl get-default
2. デフォルトの起動ターゲットの変更
GUIを起動すべきではないサーバーを設定している場合、デフォルトターゲットをmulti-user.targetに設定できます。
sudo systemctl set-default multi-user.target
3. 再起動と停止
rebootおよびshutdownコマンドは引き続き機能しますが、systemctlはこれらのアクションを実行するためのネイティブな方法を提供します。
# システムを即座に再起動
sudo systemctl reboot
# システムを停止(電源オフ)
sudo systemctl poweroff
必須のsystemctlコマンドの概要
| アクション | コマンド構文 | 目的 |
|---|---|---|
| 即時開始 | sudo systemctl start name.service |
サービスを直ちに実行します。 |
| 即時停止 | sudo systemctl stop name.service |
実行中のサービスを終了します。 |
| 再起動 | sudo systemctl restart name.service |
サービスを停止してから再度開始します。 |
| リロード | sudo systemctl reload name.service |
ダウンタイムなしで設定変更を適用します(サポートされている場合)。 |
| 有効化 | sudo systemctl enable name.service |
サービスが起動時に開始されるように設定します。 |
| 無効化 | sudo systemctl disable name.service |
サービスが起動時に開始されるのを防ぎます。 |
| ステータス | systemctl status name.service |
ランタイム状態と最新のログを確認します。 |
| ログ表示 | journalctl -u name.service |
サービスに関する完全なsystemdジャーナルの履歴にアクセスします。 |
これらのコアsystemctlコマンドを習得することで、システム管理者はアプリケーションのライフサイクルを効果的に制御し、systemdを実行するLinux環境全体で信頼性と適切な構成管理を確保できます。