現在、ほとんどの Linux ディストリビューションのデフォルトのシステムおよびサービス マネージャーは
systemd
です。
systemd
プロセスは
SysV init
を置き換えます。これはカーネル起動後の最初のプロセスとして実行され、Linux ホストを使用可能な状態にする役割を果たします。サービスの開始と管理、ファイルシステムのマウント、ハードウェアの管理、ログインプロンプトの生成などを担当します。
SysV に対する主な利点は、systemd ができるだけ多くのサービスを並行して開始するため、起動プロセスが高速化され、ログイン画面がより速く表示されることです。
単位
systemd によって管理される項目はユニットと呼ばれます。ユニット ファイルは
/lib/systemd/
system にあります。
サービスユニット
サービス管理の場合、ターゲット ユニットはサービス ユニットであり、サフィックス .service が付いたユニット ファイルが含まれます。
systemd サービスの管理
systemd ユニットを管理するコマンドは
systemctl
です。
サービスの開始と停止
systemd サービスを開始するには、systemctl start コマンドを使用します。
$ sudo systemctl start name.service
.service サフィックスはそのままにすることができます。たとえば、Ubuntu で Apache サーバーを起動するには:
$ sudo systemctl start apache2
実行中のサービスを停止するには:
$ sudo systemctl stop name.service
したがって、Ubuntu で Apache サーバーを停止するには、次のようにします。
$ sudo systemctl stop apache2
サービスの再起動とリロード
実行中のサービスを再起動するには、restart コマンドを使用します。
$ sudo systemctl restart name.service
構成ファイルのリロードのみが必要な場合
$ sudo systemctl reload name.service
サービスの有効化と無効化
システム起動時にサービスを自動的に開始したい場合は、enable コマンドを使用します。
$ sudo systemctl enable name.service
システム起動時にサービスが開始されないようにするには:
$ sudo systemctl disable name.service
無効にしても、実行中のサービスは停止されません。
サービスステータスの表示
サービスに関する情報を表示するには:
$ sudo systemctl status name.service
これにより、サービスのステータスとログ ファイルの最初の数行が表示されます。したがって、サービスの実行中の出力は次のようになります。
sudo systemctl status apache2
は
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Tue 2020-05-19 22:11:36 UTC; 4 days ago
Process: 116002 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
Main PID: 104165 (apache2)
Tasks: 55 (limit: 1024)
CGroup: /system.slice/apache2.service
├─104165 /usr/sbin/apache2 -k start
├─116006 /usr/sbin/apache2 -k start
└─116007 /usr/sbin/apache2 -k start
May 19 22:11:36 ubuntu18 systemd[1]: Starting The Apache HTTP Server...
May 19 22:11:36 ubuntu18 systemd[1]: Started The Apache HTTP Server.
May 21 06:25:01 ubuntu18 systemd[1]: Reloading The Apache HTTP Server.
May 21 06:25:01 ubuntu18 systemd[1]: Reloaded The Apache HTTP Server.
May 22 06:25:01 ubuntu18 systemd[1]: Reloading The Apache HTTP Server.
サービスがアクティブかどうかを確認するには:
$ sudo systemctl is-active name.service
したがって、apache2 サービスの実行中、systemctl is-active コマンドの出力は次のようになります。
$ sudo systemctl is-active apache2
active
サービスが有効かどうかを確認するには:
$ sudo systemctl is-enabled name.service.
システム状態の表示
これまで見てきたすべてのコマンドは、単一のサービスを管理するために使用されます。システム状態の概要が必要な場合は、次の一連のコマンドを使用します。
すべてのユニットタイプを表示するには
$ sudo systemctl -t help
Available unit types:
service
socket
target
device
mount
automount
swap
timer
path
slice
scope
インストールされているすべてのユニットをリストするには、list-unit-files を使用します。
$ sudo systemctl list-unit-files
UNIT FILE STATE
proc-sys-fs-binfmt_misc.automount static
-.mount generated
boot-efi.mount generated
dev-hugepages.mount static
dev-mqueue.mount static
mnt.mount generated
proc-sys-fs-binfmt_misc.mount static
sys-fs-fuse-connections.mount static
sys-kernel-config.mount static
sys-kernel-debug.mount static
acpid.path enabled
apport-autoreport.path enabled
systemd-ask-password-console.path static
systemd-ask-password-plymouth.path static
systemd-ask-password-wall.path static
session-161.scope transient
accounts-daemon.service enabled
出力には、Unit File と State の 2 つの列のみがあります。通常、状態は有効、無効、静的、またはマスクされます。
- 静的 : これは、ユニットを有効にできない、1 回限りのアクションを実行する、または別のユニットの依存関係にあり、単独で実行できないことを意味します。
- マスク済み: マスク済みとしてリストされているユニットは、 /dev/null にリンクされているため、完全に起動できないことを意味します 。 これをユニットのマスキングといいます。これにより、手動または自動でサービスが開始されなくなります。
インストールされているすべてのサービスをリストする
systemctl list-unit-files コマンドに -t または –type サービス フィルターを指定すると、インストールされているサービスの状態のみが表示されます。
$ sudo systemctl list-unit-files -t service
UNIT FILE STATE
accounts-daemon.service enabled
acpid.service disabled
apache-htcacheclean.service disabled
apache-htcacheclean@.service disabled
apache2.service enabled
apache2@.service disabled
apparmor.service enabled
apport-autoreport.service static
apport-forward@.service static
apport.service generated
apt-daily-upgrade.service static
apt-daily.service static
atd.service enabled
autovt@.service enabled
blk-availability.service enabled
bootlogd.service masked
bootlogs.service masked
すべてのアクティブなサービス ユニットを表示するには、list-units を -t サービス フィルターとともに使用します。
$ sudo systemctl list-units -t service
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service loaded active running Accounts Service
apache2.service loaded active running The Apache HTTP Server
apparmor.service loaded active exited AppArmor initialization
apport.service loaded active exited LSB: automatic crash report generation
atd.service loaded active running Deferred execution scheduler
blk-availability.service loaded active exited Availability of block devices
cloud-config.service loaded active exited Apply the settings specified in cloud-con
cloud-final.service loaded active exited Execute cloud user/final scripts
cloud-init-local.service loaded active exited Initial cloud-init job (pre-networking)
cloud-init.service loaded active exited Initial cloud-init job (metadata service
console-setup.service loaded active exited Set console font and keymap
cron.service loaded active running Regular background program processing dae
出力には次の列があります。
- UNIT : systemd サービスユニット名
- LOAD : ユニット定義が正しく読み取られ、ロードされたかどうかを示します。
- ACTIVE : ユニットがアクティブかどうかを示します。
- SUB : ユニットの低レベルのアクティブ化状態。ユニットに関するより詳細な情報が得られます。これはユニットの種類によって異なります。
- DESCRIPTION : サービスユニットの説明。
結論
この記事で、systemctl を使用して Linux 上でサービスを管理する方法について理解していただければ幸いです。さらに詳しく知りたい場合は、この Linux マスター コース をご覧ください。