10.2. システムサービスの管理
注記
/etc/rc.d/init.d/ にある init スクリプト を使用していました。これらの init スクリプトは通常 Bash で書かれており、システム管理者がシステムの状態とシステム内のデーモンを管理できるようになっていました。Red Hat Enterprise Linux 7 では、これらの init スクリプトは、サービスユニット に代わっています。
.service で終わり、init スクリプトと同様の目的を果たします。システムサービスの表示、開始、停止、再開、有効化、無効化には、表10.3「service ユーティリティーと systemctl の比較」、表10.4「chkconfig ユーティリティーと systemctl の比較」、および本セクションで説明されているように、systemctl コマンドラインを使用します。service および chkconfig はシステム内で利用可能でまだ機能しますが、これらは互換性のために含まれており、使用の回避をお勧めします。
表10.3 service ユーティリティーと systemctl の比較
| サービス | systemctl | 詳細 |
|---|---|---|
service name start
| systemctl start name.service
| サービスを起動します。 |
service name stop
| systemctl stop name.service
| サービスを停止します。 |
service name restart
| systemctl restart name.service
| サービスを再起動します。 |
service name condrestart
| systemctl try-restart name.service
| サービスが実行中の場合のみ、再起動します。 |
service name reload
| systemctl reload name.service
| 設定を再読み込みします。 |
service name status
| systemctl status name.service
systemctl is-active name.service
| サービスが実行中かどうかをチェックします。 |
service --status-all
| systemctl list-units --type service --all
| すべてのサービスのステータスを表示します。 |
表10.4 chkconfig ユーティリティーと systemctl の比較
| chkconfig | systemctl | 詳細 |
|---|---|---|
chkconfig name on
| systemctl enable name.service
| サービスを有効にします。 |
chkconfig name off
| systemctl disable name.service
| サービスを無効にします。 |
chkconfig --list name
| systemctl status name.service
systemctl is-enabled name.service
| サービスが有効かどうかをチェックします。 |
chkconfig --list
| systemctl list-unit-files --type service
| サービスすべてを一覧表示し、それらが有効かどうかをチェックします。 |
chkconfig --list
| systemctl list-dependencies --after
| 指定されたユニットの前に開始するよう命令されるサービスを一覧表示します。 |
chkconfig --list
| systemctl list-dependencies --before
| 指定されたユニットの後に開始するよう命令されるサービスを一覧表示します。 |
サービスユニットの指定
.service ファイル拡張子がついた完全なユニット名を使用します。例を示します。
~]# systemctl stop nfs-server.servicesystemctl は引数がサービスユニットであることを想定します。以下のコマンドは、上記のコマンドと同等のものになります。
~]# systemctl stop nfs-server~]# systemctl show nfs-server.service -p Nameschroot 環境における systemctl の動作
chroot コマンドを使って root ディレクトリを変更すると、ほとんどの systemctl コマンドは、アクションの実行を一切拒否します。なぜなら、systemd プロセスと、chroot コマンドを使用しているユーザーは、ファイルシステムに関して異なる見方を持っているからです。このような状況は、 systemctl が kickstart ファイルから呼び出されたときなどに発生します。
systemctl enable や systemctl disable などのユニットファイルコマンドです。これらのコマンドは、実行中のシステムを必要とせず実行中のプロセスに影響を与えませんが、ユニットファイルには影響を与えます。したがってこれらのコマンドは、chroot 環境であっても実行することが可能です。たとえば、 /srv/website1/ ディレクトリの下位のシステムで httpd サービスを有効化するときは。
~]#chroot /srv/website1~]#systemctl enable httpd.serviceCreated symlink /etc/systemd/system/multi-user.target.wants/httpd.service, pointing to /usr/lib/systemd/system/httpd.service.
10.2.1. サービスの一覧表示
systemctl list-units --type serviceUNIT) を表示し、その後にユニットファイルが読み込み済みかどうか (LOAD)、高レベル (ACTIVE) および低レベル (SUB) のユニットファイルのアクティベーション状態、および簡単な説明 (DESCRIPTION) が続きます。
systemctl list-units コマンドはアクティブなユニットのみを表示します。状態に関係なくすべての読み込み済みユニットを表示したい場合は、--all または -a のオプションを付けてコマンドを実行します。
systemctl list-units --type service --allsystemctl list-unit-files --type serviceUNIT FILE) を表示し、その後にサービスユニットが有効かどうか (STATE) が表示されます。個別のサービスユニットの状態を判断する方法については、「サービスステータスの表示」 を参照してください。
例10.1 サービスの一覧表示
~]$ 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
abrt-vmcore.service loaded active exited Harvest vmcores for ABRT
abrt-xorg.service loaded active running ABRT Xorg 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, i.e. 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-unit-files --type service
UNIT FILE STATE
abrt-ccpp.service enabled
abrt-oops.service enabled
abrt-vmcore.service enabled
abrt-xorg.service enabled
abrtd.service enabled
...
wpa_supplicant.service disabled
ypbind.service disabled
208 unit files listed.10.2.2. サービスステータスの表示
systemctl status name.servicegdm) に置き換えます。このコマンドでは、選択されたサービスユニット名の後に、その説明と 表10.5「利用可能なサービスユニットの情報」 にある 1 つ以上のフィールド、さらに root ユーザーが実行している場合には、最新のログエントリーが表示されます。
表10.5 利用可能なサービスユニットの情報
| フィールド | 詳細 |
|---|---|
Loaded | サービスユニットが読み込まれているかどうか、ユニットファイルへの絶対パス、ユニットが有効かどうかについての説明。 |
Active | サービスユニットが実行中かどうかの情報の後に、タイムスタンプが続きます。 |
Main PID | 対応するシステムサービスの PID の後に、その名前が続きます。 |
Status | 対応するシステムサービスについての追加情報。 |
Process | 関連プロセスについての追加情報。 |
CGroup | 関連する Control Group (cgroups) についての追加情報。 |
systemctl is-active name.servicesystemctl is-enabled name.servicesystemctl is-active および systemctl is-enabled は両方とも、指定されたサービスユニットが実行中または有効な場合に、0 の終了ステータスを返すことに注意してください。現在読み込み済みのサービスユニットすべてを一覧表示する方法については、「サービスの一覧表示」 を参照してください。
例10.2 サービスステータスの表示
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
├─1037 /usr/libexec/gdm-simple-slave --display-id /org/gno...
└─1047 /usr/bin/Xorg :0 -background none -verbose -auth /r...
Oct 17 17:31:23 localhost systemd[1]: Started GNOME Display Manager.例10.3 サービスの前に開始するように命令されるサービスの表示
~]# 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]例10.4 サービスの後に開始するように命令されるサービスの表示
~]# 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.service10.2.3. サービスの起動
root でシェルプロンプトに以下を入力します。
systemctl start name.servicegdm) に置き換えます。このコマンドは、選択されたサービスを現行セッションで開始します。起動時にサービスユニットを開始するようにする方法は、「サービスの有効化」 を参照してください。特定のサービスユニットのステータスを判断する方法については、「サービスステータスの表示」 を参照してください。
例10.5 サービスの起動
httpd.service になります。このサービスユニットをアクティブ化して、現行セッションで httpd デーモンを開始するには、root で以下のコマンドを実行します。
~]# systemctl start httpd.service10.2.4. サービスの停止
root でシェルプロンプトに以下を入力します。
systemctl stop name.servicebluetooth) に置き換えます。このコマンドは、選択されたサービスを現行セッションで停止します。起動時にサービスユニットを無効にして開始しないようにする方法は、「サービスの無効化」 を参照してください。特定のサービスユニットのステータスを判断する方法については、「サービスステータスの表示」 を参照してください。
例10.6 サービスの停止
bluetoothd デーモンのサービスユニット名は bluetooth.service になります。このサービスユニットを無効にして bluetoothd デーモンを現行セッションで停止するには、root で以下のコマンドを実行します。
~]# systemctl stop bluetooth.service10.2.5. サービスの再開
root でシェルプロンプトに以下を入力します。
systemctl restart name.servicehttpd) に置き換えます。このコマンドは、選択されたサービスを現行セッションで停止し、即座に再起動します。重要な点は、選択されたサービスユニットが実行中でない場合、このコマンドがそのサービスユニットを起動するということです。対応するサービスがすでに実行中の場合にのみ、サービスユニットを再起動するように systemd に指示するには、root で以下のコマンドを実行します。
systemctl try-restart name.serviceroot で以下を入力します。
systemctl reload name.servicesystemctl コマンドは、この機能をサポートしないサービスを再起動する reload-or-restart および reload-or-try-restart コマンドもサポートします。特定のサービスユニットのステータスを判断する方法は、「サービスステータスの表示」 を参照してください。
例10.7 サービスの再開
root でシェルプロンプトに以下を入力します。
~]# systemctl reload httpd.service10.2.6. サービスの有効化
root でシェルプロンプトに以下を入力します。
systemctl enable name.servicehttpd) に置き換えます。このコマンドは、選択されたサービスユニットの [Install] セクションを読み取り、/etc/systemd/system/ ディレクトリーおよびそのサブディレクトリーにある/usr/lib/systemd/system/name.service ファイルへの適切なシンボリックリンクを作成します。ただし、このコマンドは既存のリンクの上書きはしません。シンボリックリンクが確実に再度作成されるようにするには、root で以下のコマンドを使用します。
systemctl reenable name.service例10.8 サービスの有効化
root で以下のコマンドを実行します。
~]# systemctl enable httpd.service
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.10.2.7. サービスの無効化
root でシェルプロンプトに以下を入力します。
systemctl disable name.servicebluetooth) に置き換えます。このコマンドは、選択されたサービスユニットの [Install] セクションを読み取り、/etc/systemd/system/ ディレクトリーおよびそのサブディレクトリーから/usr/lib/systemd/system/name.service ファイルへの適切なシンボリックリンクを削除します。さらに、サービスユニットにマスクをして、手動で開始したり、別のサービスがこれを開始することを防ぐことができます。これを実行するには、root で以下のコマンドを実行します。
systemctl mask name.service/etc/systemd/system/name.service ファイルを /dev/null へのシンボリックリンクに置き換え、実際のユニットファイルが systemd にアクセスできないようにします。このアクセスを元に戻してサービスユニットをアンマスクするには、root で以下を入力します。
systemctl unmask name.service例10.9 サービスの無効化
bluetooth.service ユニットを停止する方法を説明しています。このサービスユニットが起動時に開始しないようにするには、root でシェルプロンプトに以下を入力します。
~]# systemctl disable bluetooth.service
Removed symlink /etc/systemd/system/bluetooth.target.wants/bluetooth.service.
Removed symlink /etc/systemd/system/dbus-org.bluez.service.10.2.8. 競合するサービスの起動
postfix サービスを実行しているときに sendmail サービスを実行しようとすると、 systemd が postfix を自動的に停止させます。これら 2 つのサービスは競合しており、同じポートで実行させることができないためです。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.