12.2. systemctl によるシステムサービス管理
システム管理者は、systemctl
ユーティリティーを使用してシステムサービスを管理できます。実行中のサービスの起動、停止、再起動、ブート時に起動するサービスの有効化と無効化、利用可能なサービスのリスト表示、システムサービスのステータスの表示など、さまざまなタスクを実行できます。
12.2.1. システムサービスのリスト表示
現在ロードされているすべてのサービスユニットをリストし、使用可能なすべてのサービスユニットのステータスを表示できます。
手順
systemctl
コマンドを使用して、次のタスクのいずれかを実行します。
現在ロードされているすべてのサービスユニットをリストします。
$ systemctl list-units --type service UNIT LOAD ACTIVE SUB DESCRIPTION abrt-ccpp.service loaded active exited Install ABRT coredump hook abrt-oops.service loaded active running ABRT kernel log watcher abrtd.service loaded active running ABRT Automated Bug Reporting Tool ... systemd-vconsole-setup.service loaded active exited Setup Virtual Console tog-pegasus.service loaded active running OpenPegasus CIM Server LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, or a generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 46 loaded units listed. Pass --all to see loaded but inactive units, too. To show all installed unit files use 'systemctl list-unit-files'
デフォルトでは、
systemctl list-units
コマンドは、アクティブなユニットのみを表示します。このコマンドは、サービスユニットファイルごとに、次のパラメーターの概要を提供します。UNIT
- サービスユニットのフルネーム
LOAD
- 設定ファイルのロード状態
ACTIVE
またはSUB
- 現在の高レベルおよび低レベルのユニットファイルのアクティベーション状態
DESCRIPTION
- ユニットの目的と機能の簡単な説明
--all
または-a
コマンドラインオプションを指定して次のコマンドを使用し、ロードされたすべてのユニットを状態に関係なく をリスト表示します。$ systemctl list-units --type service --all
利用可能なすべてのサービスユニットのステータス (enabled または disabled) をリスト表示します。
$ systemctl list-unit-files --type service UNIT FILE STATE abrt-ccpp.service enabled abrt-oops.service enabled abrtd.service enabled ... wpa_supplicant.service disabled ypbind.service disabled 208 unit files listed.
このコマンドでは、サービスユニットごとに以下を表示します。
UNIT FILE
- サービスユニットのフルネーム
STATE
- サービスユニットがブート時に自動的に起動するかどうかの情報
関連情報
12.2.2. システムサービスステータスの表示
サービスユニットを検査して詳細情報を取得し、サービスの状態 (ブート時の起動が有効かどうか、現在実行中かどうか) を確認できます。特定のサービスユニットの前または後に起動するように指定されたサービスを表示することもできます。
手順
systemctl
コマンドを使用して、次のタスクのいずれかを実行します。
システムサービスに対応するサービスユニットに関する詳細情報を表示します。
$ systemctl status <name>.service
<name>
は、確認するサービスユニットの名前 (gdm
など) に置き換えます。このコマンドでは、以下の情報が表示されます。
- 選択したサービスユニットの名前とその後に続く簡単な説明
- 利用可能なサービスユニットの情報 で説明されている 1 つ以上のフィールド
-
サービスユニットの実行: ユニットが
root
ユーザーによって実行される場合 最新のログエントリー
表12.2 利用可能なサービスユニットの情報 フィールド 説明 Loaded
サービスユニットがロードされているかどうかの説明、ユニットファイルへの絶対パス、およびブート時のユニット起動が有効かどうかの注記。
Active
サービスユニットが実行中かどうかの説明と、タイムスタンプ
Main PID
プロセス ID と、対応するシステムサービスの名前。
Status
対応するシステムサービスに関する追加情報
Process
関連プロセスに関する追加情報
CGroup
関連するコントロールグループ (
cgroups
) に関する追加情報。
例12.1 サービスステータスの表示
GNOME Display Manager のサービスユニット名は
gdm.service
になります。このサービスユニットの現在のステータスを確認するには、シェルプロンプトで次のコマンドを実行します。# systemctl status gdm.service gdm.service - GNOME Display Manager Loaded: loaded (/usr/lib/systemd/system/gdm.service; enabled) Active: active (running) since Thu 2013-10-17 17:31:23 CEST; 5min ago Main PID: 1029 (gdm) CGroup: /system.slice/gdm.service ├─1029 /usr/sbin/gdm └─1047 /usr/bin/Xorg :0 -background none -verbose -auth /r... Oct 17 17:31:23 localhost systemd[1]: Started GNOME Display Manager.
特定のサービスユニットが実行中であることを確認します。
$ systemctl is-active <name>.service
特定のサービスユニットのブート時起動が有効かどうかを確認します。
$ systemctl is-enabled <name>.service
注記systemctl is-active
およびsystemctl is-enabled
コマンドは、指定したサービスユニットが実行中または有効な場合に、終了ステータス0
を返します。指定したサービスユニットの前に
systemd
がどのサービスの起動を指示するかを確認します。# systemctl list-dependencies --after <name>.service
たとえば、
gdm
の前に起動するサービスのリストを表示するには、次のように入力します。# systemctl list-dependencies --after gdm.service gdm.service ├─dbus.socket ├─getty@tty1.service ├─livesys.service ├─plymouth-quit.service ├─system.slice ├─systemd-journald.socket ├─systemd-user-sessions.service └─basic.target [output truncated]
指定したサービスユニットの後に
systemd
がどのサービスの起動を指示するかを確認します。# systemctl list-dependencies --before <name>.service
たとえば、
gdm
の後に起動するようにsystemd
が指示するサービスのリストを表示するには、次のように入力します。# systemctl list-dependencies --before gdm.service gdm.service ├─dracut-shutdown.service ├─graphical.target │ ├─systemd-readahead-done.service │ ├─systemd-readahead-done.timer │ └─systemd-update-utmp-runlevel.service └─shutdown.target ├─systemd-reboot.service └─final.target └─systemd-reboot.service
関連情報
12.2.3. システムサービスの起動
start
コマンドを使用すると、現在のセッションでシステムサービスを起動できます。
前提条件
- Root アクセス
手順
現在のセッションでシステムサービスを起動します。
# systemctl start <name>.service
<name>
は、起動するサービスユニットの名前 (httpd.service
など) に置き換えます。注記systemd
には、サービス間で正と負の依存関係が存在します。特定のサービスを起動するとき、別のサービスを 1 つまたは複数開始 (正の依存関係)、あるいはサービスを 1 つまたは複数停止 (負の依存関係) することが必要となる場合があります。新しいサービスの起動を試みると、ユーザーに明示的な通知なしに、
systemd
がすべての依存関係を自動的に解決します。つまり、サービスを実行していて、負の依存関係にある別のサービスを起動しようとすると、最初のサービスが自動的に停止します。たとえば、
postfix
サービスを実行している時にsendmail
サービスを起動すると、systemd
は、自動的にpostfix
を停止します。この 2 つのサービスは競合するため、同じポートでは実行できません。
関連情報
-
systemctl(1)
man ページ - ブート時のシステムサービス起動の有効化
- システムサービスステータスの表示
12.2.4. システムサービスの停止
現行セッションでシステムサービスを停止するには、stop
コマンドを使用します。
前提条件
- Root アクセス
手順
システムサービスを停止します。
# systemctl stop <name>.service
<name>
は、停止するサービスユニットの名前 (bluetooth
など) に置き換えます。
関連情報
-
systemctl(1)
man ページ - ブート時のシステムサービス起動の無効化
- システムサービスステータスの表示
12.2.5. システムサービスの再起動
restart
コマンドを使用して次のアクションを実行すると、現在のセッションでシステムサービスを再起動できます。
- 現在のセッションで選択したサービスユニットを停止し、すぐに再起動する。
- 対応するサービスがすでに実行中の場合にのみ、サービスユニットを再起動する。
- システムサービスの実行を中断せずに、システムサービスの設定を再ロードする。
前提条件
- Root アクセス
手順
システムサービスを再起動します。
# systemctl restart <name>.service
<name>
は、再起動するサービスユニットの名前 (httpd
など) に置き換えます。注記選択したサービスユニットが実行中でない場合には、このコマンドでこのサービスユニットが起動します。
オプション: 対応するサービスがすでに実行中の場合にのみ、サービスユニットを再起動します。
# systemctl try-restart <name>.service
オプション: サービスの実行を中断せずに設定を再ロードします。
# systemctl reload <name>.service
注記システムサービスがこの機能をサポートしない場合は、このコマンドは無視されることに注意してください。このようなサービスを再起動するには、代わりに
reload-or-restart
コマンドおよびreload-or-try-restart
コマンドを使用します。
関連情報
-
systemctl
の man ページ - システムサービスステータスの表示
12.2.6. ブート時のシステムサービス起動の有効化
ブート時のサービスの自動起動を有効にすることができます。この変更は次回のリブート時に適用されます。
前提条件
- Root アクセス
有効にするサービスがマスクされていない。マスクされたサービスがある場合は、まずマスクを解除します。
# systemctl unmask <name>.service
手順
システムの起動時にサービスが起動するようにします。
# systemctl enable <name>.service
<name>
は、有効にするサービスユニット名 (httpd
など) に置き換えます。オプション: 1 つのコマンドでサービスを有効にして起動することもできます。
# systemctl enable --now <name>.service
関連情報
-
systemctl (1)
man ページ - システムサービスステータスの表示
- システムサービスの起動
12.2.7. ブート時のシステムサービス起動の無効化
システムの起動時にサービスユニットが自動的に起動しないようにすることができます。サービスを無効にすると、ブート時に起動されませんが、手動で起動できます。手動で開始できないようにサービスをマスクすることもできます。マスキングは、サービスが再度マスク解除されるまでサービスが永続的に使用できなくなるようにするサービスを無効にする方法です。
前提条件
- Root アクセス
手順
サービスがブート時に起動するのを無効にします。
# systemctl disable <name>.service
<name>
は、無効にするサービスユニットの名前 (bluetooth
など) に置き換えます。オプション: サービスを永久に使用不可にする場合は、サービスをマスクします。
# systemctl mask <name>.service
このコマンドにより、
/etc/systemd/system/name.service
ファイルを、/dev/null
へのシンボリックリンクに置き換え、実際のユニットファイルがsystemd
ファイルにアクセスできないようにします。
関連情報
-
systemctl (1)
man ページ - システムサービスステータスの表示
- システムサービスの停止