====== systemd によるサービス作成 ======
.service ファイルはUnit、Service、Installから成る。
それぞれの指定項目は以下の通り
===== 各種役割 =====
==== Unit ====
この項目にはこのユニットの概要について記載する。
|< 100% 30% ->|
^項目^説明^
|Description|ユニットの説明|
|Documentation|ユニットについてのドキュメントURI|
|After|このユニットの前に起動するユニット|
|Before|このユニットの後に起動するユニット|
|Requires|このユニットが依存するユニット。前のユニットの起動が失敗したら起動しない。|
|Wants|このユニットが依存するユニット。前のユニットが起動していなくても起動する。|
|Conflicts|指定したユニットと一緒に起動しない|
==== Service ====
この項目には何をするのかについて記述する。
|< 100% 30% ->|
^項目^説明^
|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 ====
この項目にはどのプロセスと一緒に起動するか記述する。
|< 100% 30% - >|
^項目^説明^
|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