LoginSignup
7
5

More than 3 years have passed since last update.

systemd の systemctlコマンドでインスタンスを使用して引数を渡す方法

Posted at

systemctlコマンドでインスタンスを使用して引数を渡す方法を紹介します。

環境

  • OS:CentOS Linux release 7.7.1908

1. Unit定義ファイルを作成

以下のUnit定義ファイルを作成する。

  • サービス名(ここではtest) + @ + .serviceとする。
  • %iを使用する。
/etc/systemd/system/test@.service
[Unit]
Description=TestService

[Service]
ExecStart=/bin/echo %I

2. systemctlコマンドで引数(インスタンス名)を指定して起動

systemctl start test@"arg1 arg2"

[root@CENTOS7 ~]# systemctl start test@"arg1 arg2"
[root@CENTOS7 ~]#

journalctl -u test@"arg1 arg2"で確認。

[root@CENTOS7 ~]# journalctl -u test@"arg1 arg2"
-- Logs begin at 日 2019-12-29 17:19:15 JST, end at 日 2019-12-29 20:06:21 JST.
12月 29 20:06:21 CENTOS7 systemd[1]: Started TestService.
12月 29 20:06:21 CENTOS7 echo[1602]: arg1 arg2

/etc/systemd/system/test@.service%Iではなく%iを使用すると、arg1arg2の間の半角スペースがエスケープされ、arg1\x20arg2となってしまう。

参考

ユニットファイルがロードされる際に置換されるユニット指定子は以下となります。

ユニット指定子 意味 詳細
%n フルユニット名
%N フルユニット名(エスケープなし) %nと同じだが、文字列がエスケープされない。
%p 接頭辞 インスタンスになったユニット名の中の "@" 文字の前の文字列を参照する。
そうでないユニットの場合、接尾辞を除いたユニット名が使用される。
%P 接頭辞(エスケープなし) %pと同じだが、文字列がエスケープされない。
%i インスタンス名 インスタンスになったユニット名の"@" 文字と接尾辞の間の文字列を使用する。
%I インスタンス名(エスケープなし) %iと同じだが、文字列がエスケープされない。
%f ファイル名(エスケープなし) エスケープされていないインスタンス名。
%c ユニットのコントロールグループ このグループ名には、/sys/fs/cgroup/systemd/の接頭辞が含まれない。
%r コントロールグループの親グループのパス "%c"の親のcgroupパスが使用される。
%R スライスとユニットが置かれるルートコントロールグループパス システムインスタンスの場合、「/」になる。
なおコンテナの場合、コンテナのルートコントロールグループパスを使用する。
%t ランタイムディレクトリ /run又は、$XDG_RUNTIME_DIRが使用される。
%u ユーザ名 マネージャーを実行しているユーザのユーザ名が使用される。
通常はroot。
%U ユーザのUID マネージャーを実行しているユーザのUIDが使用される。
システム管理者の場合は0が使用される。
%h ユーザのホームディレクトリ マネージャーを実行しているユーザのホームディレクトリが指定される。
システム管理者の場合は、「/root」が使用される。
%s ユーザのシェル サービスマネージャーが使用しているシェル。
システム管理者の場合は、「/bin/sh」が使用される。
%m マシンID システムのマシンID。
%b Boot ID システムのブートID。
%H ホスト名 ユニットがロードされた時点でのシステムホスト名。
%v kernelのリリースバージョン 「uname -r」の出力で取得できる文字列を使用。

以上

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5