環境変数を参照する Python アプリを systemd でサービス化したときにかなりはまってしまいました。
systemd はユーザーの環境変数を参照しないようなので、ユニット定義ファイルで環境変数を設定する必要があるそうで、Environment
で記述したり、外部ファイルに定義して EnvironmentFile
で読み込む方法があるようです。
また、上記だと変数を展開することができないので、そのような場合には以下のように ExecStartPre
で systemctl
の set-environment
を使う方法などがあるようです。
ただ、今回の私の場合は、シェル変数 HOSTNAME
を環境変数に export して参照したかったのですが、systemd にはホスト名を表す特殊な変数として %H
があるようなので、これを使って以下のようにすれば解決できました。
[Unit]
Description=My Python App
[Service]
ExecStart=/path/to/your/python/app.py
Environment="HOSTNAME=%H"
[Install]
WantedBy=multi-user.target
参考 URL
- https://ja.stackoverflow.com/questions/62360/systemd-%E3%81%8B%E3%82%89%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%ABhome%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%97%E3%81%9F%E3%81%84
- https://qiita.com/kobanyan/items/f8e8a3bd5406e1d290fb
- https://stackoverflow.com/questions/37864999/referencing-other-environment-variables-in-systemd