systemd
基礎
- サービスなどの管理対象を
Unit(ユニット)
として管理 - systemd が起動すると
default.target
というユニットが有効になる
ユニット
systemd が管理する処理単位
ユニット定義ファイル
- /usr/lib/systemd/system
- サービスイントール時にユニット定義ファイルが置かれ、これがシステムの既定値
- /etc/systemd/system
- 設定の変更が必要になる場合には上記のディレクトリからファイルをコピーして利用
- こちらの設定が優先される
- /usr/lib/systemd/system
種類
拡張子 用途 説明 .service サービス 有効にすると対応するサービスが起動 .target ターゲット 何もしない
後述する依存関係の定義に使用.socket ソケット ソケットをリッスンする
接続があれば対応するサービスを起動
xinetd の代替
対になる service ファイルが必要.muont マウント 有効にすると対応するファイルシステムがマウントされる .swap Swap 領域 有効にすると Swap 領域がアクティブになる .device デバイス udev がデバイスを認識すると有効になる
ユニット定義ファイル
NetworkManager サンプル
# 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 network.service [Service] Type=dbus BusName=org.freedesktop.NetworkManager ExecReload=/usr/bin/dbus-send --print-reply --system --type=method_call --dest=org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.NetworkManager.Reload uint32: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 # ibft settings plugin calls iscsiadm which needs CAP_SYS_ADMIN #CapabilityBoundingSet=CAP_SYS_ADMIN ProtectSystem=true ProtectHome=read-only [Install] WantedBy=multi-user.target Alias=dbus-org.freedesktop.NetworkManager.service Also=NetworkManager-dispatcher.service
- [Unit]
- セクションの開始
- [Install]
- a
- [Unit]
- 環境変数を読み込ませる
EnvironmentFile=/etc/sysconfig/test
Tips
/var/log/messages に「systemd: Starting User Slice of root」が出ることの抑制
systemd で制御
# vim /etc/systemd/system.conf LogLevel=notice
- journalctl でもログ閲覧不可
rsyslog 側の除外設定で制御
- 参照
- journalctl ではログ閲覧可能
sample go app
# cat /etc/systemd/system/go-app.service [Unit] Description = Go app [Service] User=root Group=root ExecStart = /usr/local/go/bin/go run /opt/main.go ExecStop = systemctl kill -s9 $MAINPID ExecReload = /bin/kill -HUP $MAINPID && /usr/local/go/bin/go run /opt/main.go Restart = no Type = simple [Install] WantedBy = multi-user.target