それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

systemd のユニットを@引数で再利用する。

systemd のユニットファイルを引数で使いまわしする

一部が違うだけのユニットファイルを、引数で使い分ける。テンプレートを作成できる。

systemctl start my-service@foo.service
systemctl start my-service@bar.service

引数は %i で受け取ります。

i はインスタンス名の意味です。@name.service はインスタンスという名称です。

作り方。

引数を受け取るユニットファイルを作成する。

my-service@.service

my-service@.service のように@.service で名前を定義する

引数の受け取り方。%i

%i で引数を受け取る。

[Unit]
Description=テンプレートなサービスを作成する練習。 %i 秒スリープします

[Service]
ExecStart=bash -c 'while : ; do echo loop ; sleep %i ;done '

[Install]
WantedBy=default.target

テンプレートを有効にする。

パラメタを受け取る、ユニットを登録します。

cp my-service@.service /etc/systemd/system
systemctl daemon-reload

引数を加えてサービスにします。

systemctl start my-service@foo.service 
## または
systemctl enable my-service@foo.service 

enable すると再起動後も有効になる。

%i 以外の変数

%i のインスタンス名称以外の「変数」は最初から使えるものも多いです

公式サイトに変数の一覧が公開されています。

関連資料

systemd で引数で分割を使う(@:アットマーク)ユニットのテンプレート化で似たような複数サービスをまとめる。 - それマグで!

参考資料

https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Specifiers