systemctlコマンドでサービスを起動する際に、Unit定義ファイル内で変数を使用する方法を紹介します。
環境
- OS:CentOS Linux release 7.7.1908
1. Unit定義ファイル内で変数を指定
Unit定義ファイル内でEnvironmentを使用して変数を指定することができます。
ここではtest.serviceのUnit定義ファイルを作成して、確認してみます。
- 変数
TEST_VALUE1にdisplay1、変数TEST_VALUE2にdisplay2を設定します。 -
echoで変数を表示させます。
[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_VALUE1、TEST_VALUE2の値、display1、display2が表示されました。
2. Unit定義ファイル内で環境変数を指定
Unit定義ファイル内でEnvironmentFileを使用して、環境変数ファイルを指定することができます。
ここではtest2.serviceのUnit定義ファイルを作成して、確認してみます。
TEST_VALUE1=display1
TEST_VALUE2=display2
-
EnvironmentFileに環境変数ファイル/etc/sysconfig/test2を設定します。 -
echoで変数を表示させます。
[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_VALUE1、TEST_VALUE2の値、display1、display2が表示されました。
補足
なお、環境変数ファイル/etc/sysconfig/test2の中で、TEST_VALUE1=$PATH等を指定しても、以下の通り$PATHは展開されません。
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
以上