LoginSignup
7
14

More than 3 years have passed since last update.

systemd の Unit定義ファイル で 変数 を使用する方法

Posted at

systemctlコマンドでサービスを起動する際に、Unit定義ファイル内で変数を使用する方法を紹介します。

環境

  • OS:CentOS Linux release 7.7.1908

1. Unit定義ファイル内で変数を指定

Unit定義ファイル内でEnvironmentを使用して変数を指定することができます。
ここではtest.serviceのUnit定義ファイルを作成して、確認してみます。

  • 変数TEST_VALUE1display1、変数TEST_VALUE2display2を設定します。
  • echoで変数を表示させます。
/etc/systemd/system/test.service
[Unit]
Description=TestService

[Service]
Environment=TEST_VALUE1=display1
Environment=TEST_VALUE2=display2
ExecStart=/bin/echo ${TEST_VALUE1} ${TEST_VALUE2}

systemctl start testで起動します。

[root@CENTOS7 ~]# systemctl start test
[root@CENTOS7 ~]#

journalctl -u testで確認します。

[root@CENTOS7 ~]# journalctl -u test
-- Logs begin at 日 2019-12-29 17:19:15 JST, end at 日 2019-12-29 18:07:04 JST.
12月 29 18:07:04 CENTOS7 systemd[1]: Started TestService.
12月 29 18:07:04 CENTOS7 echo[1398]: display1 display2

変数TEST_VALUE1TEST_VALUE2の値、display1display2が表示されました。

2. Unit定義ファイル内で環境変数を指定

Unit定義ファイル内でEnvironmentFileを使用して、環境変数ファイルを指定することができます。
ここではtest2.serviceのUnit定義ファイルを作成して、確認してみます。

/etc/sysconfig/test2
TEST_VALUE1=display1
TEST_VALUE2=display2
  • EnvironmentFileに環境変数ファイル/etc/sysconfig/test2を設定します。
  • echoで変数を表示させます。
/etc/systemd/system/test2.service
[Unit]
Description=Test2Service

[Service]
EnvironmentFile=/etc/sysconfig/test2
ExecStart=/bin/echo ${TEST_VALUE1} ${TEST_VALUE2}

systemctl start test2で起動します。

[root@CENTOS7 ~]# systemctl start test2
[root@CENTOS7 ~]#

journalctl -u test2で確認します。

[root@CENTOS7 ~]# journalctl -u test2
-- Logs begin at 日 2019-12-29 17:19:15 JST, end at 日 2019-12-29 18:19:45 JST.
12月 29 18:19:45 CENTOS7 systemd[1]: Started Test2Service.
12月 29 18:19:45 CENTOS7 echo[1444]: display1 display2

/etc/sysconfig/test2に設定した、変数TEST_VALUE1TEST_VALUE2の値、display1display2が表示されました。

補足

なお、環境変数ファイル/etc/sysconfig/test2の中で、TEST_VALUE1=$PATH等を指定しても、以下の通り$PATHは展開されません。

/etc/sysconfig/test2
TEST_VALUE1=display1
TEST_VALUE2=$PATH
[root@CENTOS7 ~]# systemctl start test2
[root@CENTOS7 ~]# journalctl -u test2
-- Logs begin at 日 2019-12-29 17:19:15 JST, end at 日 2019-12-29 18:25:04 JST.
12月 29 18:25:04 CENTOS7 systemd[1]: Started Test2Service.
12月 29 18:25:04 CENTOS7 echo[1457]: display1 $PATH

以上

7
14
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
14