10
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

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

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

以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
10
Help us understand the problem. What are the problem?