Systemd で環境変数を読む読む

NO IMAGE

JNI なライブラリを含み、Spring Boot で作成した実行可能 jar を下記のように実行できるとします。

java -Djava.library.path=/usr/lib/jni -jar temperature_humidity_teller-1.0.0-SNAPSHOT.jar

この jar を Systemd サービスとして OS 起動と共に起動させたいというのがモチベーションです。

例えば、/etc/profile.d/ に jni.sh みたいなファイルを作成し、その中身を export LD_LIBRARY_PATH=/usr/lib/jni のようにしても、一般ユーザーでの実行では有効ですが、Systemd からの実行では無視されてしまいます。

というわけで、Ubuntu/Debian/Raspbian の場合、

sudo touch /etc/default/jni
sudo sh -c "echo 'LD_LIBRARY_PATH=/usr/lib/jni' >> /etc/default/jni"

のように /etc/default にファイルを作成した上で、サービスファイルの EnvironmentFile で読み込みます。

[Unit]
Description=temperature_humidity_teller
After=syslog.target

[Service]
# chenge it to your username
User=hirooka
EnvironmentFile=/etc/default/jni
ExecStart=/opt/temperature_humidity_teller/temperature_humidity_teller-1.0.0-SNAPSHOT.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

CentOS の場合、

sudo touch /etc/sysconfig/jni
sudo sh -c "echo 'LD_LIBRARY_PATH=/usr/lib/jni' >> /etc/sysconfig/jni"

のように /etc/sysconfig にファイルを作成した上で、サービスファイルの EnvironmentFile で読み込みます。

[Unit]
Description=temperature_humidity_teller
After=syslog.target

[Service]
# chenge it to your username
User=hirooka
EnvironmentFile=/etc/sysconfig/jni
ExecStart=/opt/temperature_humidity_teller/temperature_humidity_teller-1.0.0-SNAPSHOT.jar
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

CentOSカテゴリの最新記事