Unit
Unitには以下の11種類があります。各Unitを定義したファイルの拡張子がタイプを表しています。下表の区別の他、Unitにはsystemとuserの区別があります。
タイプ名 | 説明 |
service | サービス |
device | デバイス |
mount | マウント |
automount | オートマウント |
swap | スワップ |
path | ファイル監視 |
socket | socketやdbusの待ち受け |
timer | タイマー |
scope | Linux Control Groupの管理 |
slice | Linux Control Groupの管理 |
target | 依存関係の整理 |
現在systemdが扱っているUnitの一覧を調べるには以下のコマンドを実行します。1行に1Unitの情報を表示します。各行にLOAD(メモリ上に読んでいるか), ACTIVE(unitの状態), SUB(サブ状態), DESCRIPTION(説明) を表示します。
$ systemctl list-units -a
unitの詳細を調べる場合は、以下のコマンドを実行します。人間が見やすいのがstatusサブコマンドで、より詳細を調べたいときや機械処理したいときにshowサブコマンドを使います。
$ systemctl status unit名 $ systemctl show unit名
unit file
配置場所
大きく以下の3箇所に配置されるそうです。私の環境(Linux x220 5.4.0-91-generic #102-Ubuntu SMP Fri Nov 5 16:31:28 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux; ※Linux Mintです)でも以下に設定ファイルやunit fileがありました。
- /lib/systemd/配下
パッケージに含まれるunit fileを配置する - /run/systemd/配下
再起動すると消えるが今だけ利用するものを配置する - /etc/systemd/配下
管理者が作成したunit fileを配置する
unit fileの中身
Software designの記事では、RHELのhttpd.serviceを取り上げていますが、httpdをインストールしていないので、NeworkManager.serviceを見てみました。
$ cat /lib/systemd/system/NetworkManager.service [Unit] Description=Network Manager Documentation=man:NetworkManager(8) Wants=network.target After=network-pre.target dbus.service Before=network.target [Service] Type=dbus BusName=org.freedesktop.NetworkManager ExecReload=/usr/bin/busctl call org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager Reload u 0 #ExecReload=/bin/kill -HUP $MAINPID ExecStart=/usr/sbin/NetworkManager --no-daemon Restart=on-failure # NM doesn't want systemd to kill its children for it KillMode=process CapabilityBoundingSet=CAP_NET_ADMIN CAP_DAC_OVERRIDE CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SETGID CAP_SETUID CAP_SYS_MODULE CAP_AUDIT_WRITE CAP_KILL CAP_SYS_CHROOT ProtectSystem=true ProtectHome=read-only [Install] WantedBy=multi-user.target Also=NetworkManager-dispatcher.service # We want to enable NetworkManager-wait-online.service whenever this service # is enabled. NetworkManager-wait-online.service has # WantedBy=network-online.target, so enabling it only has an effect if # network-online.target itself is enabled or pulled in by some other unit. Also=NetworkManager-wait-online.service