systemctlコマンド実践入門

systemctlコマンド実践入門:Linuxサービス管理を完全マスター
Linuxシステムのサービス管理を効率化するなら、systemctlコマンドが最も強力なツールです。サービスの起動・停止・再起動・ステータス確認をワンストップで実行できるこのコマンドを使いこなせば、システム管理の生産性が飛躍的に向上します。
本記事では、systemctlコマンドの基本的な使い方から、実践的なトラブルシューティング、さらにはsystemdの高度な機能まで、具体的なコマンド例と共に徹底解説します。Linuxサーバー管理者必須のスキルを、この1記事で完全に習得してください。
—目次
systemctlコマンド…
systemctlの基本的…
systemdとsyste…
サービス管理の実践テクニック
サービスの起動・停止・再起動
サービスステータスの詳細確認
サービスの自動起動設定
トラブルシューティングとデ…
サービス起動失敗時の対処法
ログ確認による問題特定
依存関係のトラブル解決
systemdの高度な機能活用
サービスユニットファイルの…
タイマーユニットによる定期実行
マスクと無効化の違いと使い分け
systemctlコマンド…
セキュリティ設定のベストプ…
パフォーマンス最適化のポイント
—systemctlコマンド…
systemctlの基本的…
systemctlコマンドは、Linuxのsystemdサービス管理システムを操作するための主要なインターフェースです。基本的な構文は以下の通りです。
systemctl [オプション] [サブコマンド] [サービス名]主なサブコマンドとその機能は以下の表の通りです。
| サブコマンド | 機能 | 使用例 |
|---|---|---|
| start | サービスを起動する | systemctl start nginx |
| stop | サービスを停止する | systemctl stop nginx |
| restart | サービスを再起動する | systemctl restart nginx |
| reload | サービス設定を再読み込み(サービスを停止しない) | systemctl reload nginx |
| status | サービスの状態を詳細表示 | systemctl status nginx |
| enable | サービスを自動起動に設定 | systemctl enable nginx |
| disable | サービスの自動起動を無効化 | systemctl disable nginx |
| is-active | サービスが現在実行中か確認 | systemctl is-active nginx |
| is-enabled | サービスが自動起動に設定されているか確認 | systemctl is-enabled nginx |
主なオプションには以下のものがあります。
--user:ユーザー単位のサービス管理(systemd –user)--now:サービスの起動と自動起動設定を同時に実行(例:systemctl enable --now nginx)--no-pager:出力をページャーなしで表示--no-legend:ヘッダーやフッターを表示しない--type=service:特定タイプのユニットのみ表示
例えば、nginxサービスを起動して自動起動も有効にする場合は以下のコマンドを実行します。
sudo systemctl enable --now nginxsystemdとsyste…
systemctlは、Linuxの初期化システムであるsystemdを操作するためのコマンドラインツールです。systemdは、従来のSysVinitに代わる現代的なinitシステムで、以下のような特徴があります。
- 並列起動:サービスを同時に起動できるため、システム起動時間が大幅に短縮
- 依存関係管理:サービス間の依存関係を自動的に解決
- サービス管理:サービスの状態監視と自動再起動機能
- リソース管理:cgroupsを使用したリソース制限
- ユニット概念:サービスだけでなく、マウントポイント、デバイス、タイマーなども管理
systemdは、以下のようなユニットファイルでサービスを定義します。
/etc/systemd/system/サービス名.service例えば、nginxサービスのユニットファイルは通常/lib/systemd/system/nginx.serviceにあります。このファイルを編集することで、サービスの動作をカスタマイズできます。
systemctlコマンドは、これらのユニットファイルを操作し、systemdに対してサービス管理の指示を出します。systemdは、これらの指示に基づいて実際のサービス管理を実行します。
—サービス管理の実践テクニック
サービスの起動・停止・再起動
サービス管理の基本は、サービスの起動・停止・再起動です。これらの操作は、システムのメンテナンスやアプリケーションの更新時に頻繁に使用されます。
サービスの起動
サービスを起動するにはstartサブコマンドを使用します。
sudo systemctl start サービス名例えば、Apache HTTP Serverを起動する場合は以下のように実行します。
sudo systemctl start apache2サービスが正常に起動したかどうかは、statusサブコマンドで確認できます。
systemctl status apache2出力例:
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-01-15 10:30:00 JST; 5min ago
Docs: https://httpd.apache.org/docs/2.4/
Main PID: 1234 (apache2)
Tasks: 55 (limit: 462)
Memory: 12.3M
CGroup: /system.slice/apache2.service
├─1234 /usr/sbin/apache2 -k start
├─1235 /usr/sbin/apache2 -k start
└─1236 /usr/sbin/apache2 -k start
サービスの停止
サービスを停止するにはstopサブコマンドを使用します。
sudo systemctl stop サービス名例えば、MySQLサービスを停止する場合は以下のように実行します。
sudo systemctl stop mysqlサービスの再起動
サービスを再起動するにはrestartサブコマンドを使用します。これは、サービスを停止してから再起動するのと同じ効果があります。
sudo systemctl restart サービス名例えば、PostgreSQLサービスを再起動する場合は以下のように実行します。
sudo systemctl restart postgresqlサービス設定の再読み込み
サービスを停止せずに設定を再読み込みするにはreloadサブコマンドを使用します。これは、Webサーバーなどの設定ファイルを更新した後に使用します。
sudo systemctl reload サービス名例えば、Nginxの設定を再読み込みする場合は以下のように実行します。
sudo systemctl reload nginx注意点:reloadがサポートされていないサービスもあります。その場合はrestartを使用する必要があります。
サービスステータスの詳細確認
サービスの状態を詳細に確認するにはstatusサブコマンドを使用します。このコマンドは、サービスの状態だけでなく、プロセスID、メモリ使用量、ログの一部など、多くの情報を提供します。
systemctl status サービス名例えば、SSHサービスの状態を確認する場合は以下のように実行します。
systemctl status ssh出力例:
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2024-01-15 09:15:23 JST; 2h ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 5678 (sshd)
Tasks: 1 (limit: 462)
Memory: 2.1M
CGroup: /system.slice/ssh.service
└─5678 /usr/sbin/sshd -D
Jan 15 09:15:23 server1 systemd
: Started OpenBSD Secure Shell server.Jan 15 09:15:23 server1 sshd[5678]: Server listening on 0.0.0.0 port 22.
status出力の主な項目:
- Loaded:ユニットファイルのパスと状態(enabled/disabled)
- Active:サービスの状態(active/inactive)と実行時間
- Docs:関連するドキュメントへのリンク
- Main PID:メインプロセスのID
- Tasks:プロセス数とリソース制限
- Memory:メモリ使用量
- CGroup:cgroupsによるリソース制限情報
- ログ:最近のログメッセージ
statusコマンドの出力をファイルに保存するには、以下のようにします。
systemctl status nginx > nginx_status.txtまた、statusコマンドの出力をJSON形式で取得するには、--output=jsonオプションを使用します。
systemctl status --output=json nginxサービスの自動起動設定
システム起動時に自動的にサービスを起動するように設定するにはenableサブコマンドを使用します。逆に自動起動を無効にするにはdisableサブコマンドを使用します。
自動起動の有効化
sudo systemctl enable サービス名例えば、Dockerサービスを自動起動に設定する場合は以下のように実行します。
sudo systemctl enable dockerこれにより、システム起動時に自動的にDockerサービスが起動します。
自動起動の無効化
sudo systemctl disable サービス名例えば、不要になったTomcatサービスの自動起動を無効にする場合は以下のように実行します。
sudo systemctl disable tomcat9自動起動設定の確認
サービスが自動起動に設定されているかどうかを確認するにはis-enabledサブコマンドを使用します。
systemctl is-enabled サービス名例えば、Cronサービスが自動起動に設定されているか確認する場合は以下のように実行します。
systemctl is-enabled cron出力例:
また、サービスが現在実行中かどうかを確認するにはis-activeサブコマンドを使用します。
systemctl is-active サービス名例えば、MariaDBサービスが実行中か確認する場合は以下のように実行します。
systemctl is-active mariadb出力例:
自動起動と即時起動を同時に実行
--nowオプションを使用すると、サービスの自動起動設定と即時起動を同時に実行できます。
sudo systemctl enable --now サービス名例えば、Redisサービスを自動起動に設定して即時起動する場合は以下のように実行します。
sudo systemctl enable --now redis-serverトラブルシューティングとデ…
サービス起動失敗時の対処法
サービスの起動に失敗した場合、原因を特定して適切に対処する必要があります。systemctlコマンドは、起動失敗時のトラブルシューティングに役立つ情報を提供します。
起動失敗の確認方法
サービスが起動に失敗した場合、statusコマンドの出力でActiveステータスがfailedと表示されます。
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2024-01-15 14:25:30 JST; 2min ago
Docs: man:nginx(8)
Process: 9876 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=1/FAILURE)
Main PID: 9877 (code=exited, status=1/FAILURE)
失敗時の主な出力項目:
- Active: failed:サービスが失敗状態であることを示す
- Result: exit-code:プロセスが異常終了したことを示す
- Process:失敗したプロセスとそのステータスコード
- Main PID:失敗したメインプロセスのID
起動失敗の主な原因と対処法
| 原因 | 確認方法 | 対処法 |
|---|---|---|
| 設定ファイルのエラー | sudo systemctl status サービス名でProcess項目を確認 | 設定ファイルを修正し、systemctl daemon-reloadを実行 |
| ポート番号の競合 | ss -tulnp | grep ポート番号でポート使用状況を確認 | 競合しているサービスを停止するか、ポート番号を変更 |
| 依存関係の不足 | journalctl -u サービス名で詳細なエラーメッセージを確認 | 不足しているパッケージをインストール |
| リソース不足 | dmesg | grep サービス名でカーネルメッセージを確認 | システムリソースを増強するか、サービスのリソース制限を調整 |
| 権限不足 | journalctl -u サービス名 -n 50で権限エラーを確認 | 適切な権限を付与するか、サービスをroot権限で実行 |
具体的なトラブルシューティング手順
以下に、一般的なサービス起動失敗のトラブルシューティング手順を示します。
- statusコマンドで状態を確認
sudo systemctl status サービス名 - 詳細なエラーメッセージを確認
journalctl -u サービス名 -b-bオプションは、システム起動以降のログのみを表示します。 - 設定ファイルの構文チェック
多くのサービスでは、設定ファイルの構文チェックが可能です。
サービス名 -t
例:nginx -t - 依存関係の確認
systemctl list-dependencies サービス名 - サービスのリロードと再起動
設定ファイルを修正した後は、以下のコマンドで設定を再読み込みします。
sudo systemctl daemon-reload
sudo systemctl restart サービス名
ログ確認による問題特定
systemctlコマンドと連携して使用できるjournalctlコマンドは、systemdのジャーナルログを表示するための強力なツールです。サービスの起動失敗や動作中の問題を特定する際に非常に役立ちます。
基本的なjournalctlの使い方
サービス固有のログを表示するには以下のコマンドを使用します。
journalctl -u サービス名例えば、MySQLサービスのログを表示する場合は以下のように実行します。
journalctl -u mysql出力例:
Jan 15 09:01:23 server1 systemd
: Starting MySQL Community Server…Jan 15 09:01:24 server1 mysqld[1234]: 2024-01-15T00:01:24.567890Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use –explicit_defaults_for_timestamp server option (see documentation for more details).
Jan 15 09:01:24 server1 systemd
: Started MySQL Community Server.Jan 15 14:25:30 server1 systemd
: mysql.service: Main process exited, code=exited, status=1/FAILUREJan 15 14:25:30 server1 systemd
: mysql.service: Failed with result ‘exit-code’.ログのフィルタリング
journalctlでは、ログを様々な条件でフィルタリングできます。
- 時間指定
journalctl -u サービス名 --since "2024-01-15 10:00:00" --until "2024-01-15 12:00:00" - 優先度指定
ログの優先度(-p)でフィルタリングできます。
journalctl -u サービス名 -p err
(err: エラー、warning: 警告、info: 情報、debug: デバッグ) - 逆順表示
journalctl -u サービス名 -r - 最新のログのみ表示
journalctl -u サービス名 -n【編集・制作ポリシー】
本記事はRoute Bloom編集部が各ベンダー公式ドキュメント・エンジニア監修をもとに作成しています。インフラ・クラウド構築は環境により異なります。本番環境への適用前に必ずテストを実施してください。情報の正確性には万全を期していますが、最新情報は各公式ドキュメントをご確認ください。ABOUT ME




