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
以上