linux:make_service
systemd によるサービス作成
.service ファイルはUnit、Service、Installから成る。 それぞれの指定項目は以下の通り
各種役割
Unit
この項目にはこのユニットの概要について記載する。
項目 | 説明 |
---|---|
Description | ユニットの説明 |
Documentation | ユニットについてのドキュメントURI |
After | このユニットの前に起動するユニット |
Before | このユニットの後に起動するユニット |
Requires | このユニットが依存するユニット。前のユニットの起動が失敗したら起動しない。 |
Wants | このユニットが依存するユニット。前のユニットが起動していなくても起動する。 |
Conflicts | 指定したユニットと一緒に起動しない |
Service
この項目には何をするのかについて記述する。
項目 | 説明 |
---|---|
Type | プロセスの起動方法 simple:デフォルト。プロセスが起動した時点で起動完了 forking:フォークして親プロセスが終了した時点で起動完了 oneshot:simple と似ているが、次のユニットを実行する前に自身のプロセスを終了する dbus:D-Bus を使うプロセスで、D-Bus の接続名を見つけると起動完了 notify:simple と似ているが、sd_notify() 関数で起動完了のメッセージを受け取ったときに起動完了 idle … simple と似ているが、他のジョブが終了するまで待機する(シェルへの出力が混ざらないようにするため) |
ExecStart | 起動時に実行するコマンド |
ExecStop | 停止時に実行するコマンド |
ExecReload | リロード時に実行するコマンド |
Restart | プロセスが停止したとき、プロセス再起動の条件。各条件は以下の4つ always:常に再起動する no:再起動しない on-success:終了コードが0で再起動する on-failure:終了コードが0以外で再起動する |
Install
この項目にはどのプロセスと一緒に起動するか記述する。
項目 | 説明 |
---|---|
Alias | enable時にここで指定された名前のユニットのシンボリックリンクを作成する |
RequiredBy | enable時にこのユニットの.requiredディレクトリにリンクを作成する |
WantedBy | enable時にこのユニットの.wantsディレクトリにリンクを作成する。default.targetやmulti-user.targetを指定する。 |
Also | enable/disable時に同時にenable/disableするユニット |
作成例
Zabbix-agent.service
[Unit] Description=Zabbix Agent After=syslog.target After=network.target [Service] Environment="CONFFILE=/etc/zabbix/zabbix_agentd.conf" EnvironmentFile=-/etc/sysconfig/zabbix-agent Type=forking Restart=on-failure PIDFile=/run/zabbix/zabbix_agentd.pid KillMode=control-group ExecStart=/usr/sbin/zabbix_agentd -c $CONFFILE ExecStop=/bin/kill -SIGTERM $MAINPID RestartSec=10s User=zabbix Group=zabbix [Install] WantedBy=multi-user.target
起動後に一度だけシェルを実行する。
以下ではconfig_network.shを起動時に実行するサービスを定義する。 /usr/lib/systemd/set_network.service というファイルを作成し、以下のように記載する。
[Unit] Description=add secondary ip address After=syslog.target After=network.target [Service] Type=simple ExecStart=/usr/local/share/config_network.sh Restart=on-failure [Install] WantedBy=default.target
作成したら、.service ファイルに実行権限を与えて daemon を再読み込みする。
# chmod +x /usr/lib/systemd/set_network.service # systemctl daemon-reload
linux/make_service.txt · 最終更新: 2022/12/26 13:30 by mikoto