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