最近在测试中发现,通过 systemd service 启动的 python 脚本无法加载系统 bashrc 内定义的环境变量。需要在 uint 中定义自定义环境变量才能生效。

首先建立自定义环境变量文件,如: /etc/env_addon,其中定义需要的环境变量:

ENV1=abcd
ENV2=5678

然后在 unit 的 service 块中加入 EnvironmentFile 指向建立的环境变量文件:

[Unit]
Description=demo
After=network.target nss-lookup.target

[Service]
User=root
EnvironmentFile=/etc/env_addon
ExecStart=/usr/bin/python /path/main.py
Restart=on-failure

[Install]
WantedBy=multi-user.target

重新加载并重启服务:

sudo systemctl daemon-reload
sudo systemctl restart demo.service

如果需要系统的 ~/.bashrc 同时加载这个自定义的环境变量文件,可以在 bashrc 中加入下面内容:

set -a; source /etc/env_addon; set +a

重新加载环境:

source ~/.bashrc

参考链接
Using a user's .bashrc in a systemd service
Using environment variables in systemd units Environment directive