如何为通过systemd运行的Python脚本设置LANG环境变量?
在systemd服务中设置LANG环境变量解决Python编码错误
有两种简单的方法可以在你的script.service配置里设置LANG=en_US.utf8环境变量:
方法一:在ExecStart中直接指定环境变量
和你手动启动脚本的逻辑一致,通过/usr/bin/env传递环境变量,修改[Service]段的ExecStart:
[Unit] Description=My Script After=syslog.target [Service] Type=simple User=username Group=sudo WorkingDirectory=/home/username/project_dir/ ExecStart=/usr/bin/env LANG=en_US.utf8 /usr/bin/python3.11 main.py [Install] WantedBy=multi-user.target
方法二:使用systemd的Environment字段
这是更规范的systemd配置方式,适合需要设置多个环境变量的场景,在[Service]段添加Environment字段:
[Unit] Description=My Script After=syslog.target [Service] Type=simple User=username Group=sudo WorkingDirectory=/home/username/project_dir/ Environment="LANG=en_US.utf8" ExecStart=/usr/bin/python3.11 main.py [Install] WantedBy=multi-user.target
配置生效步骤
修改完服务文件后,执行以下命令让配置生效:
- 重新加载systemd配置:
sudo systemctl daemon-reload - 重启你的服务:
sudo systemctl restart script.service
验证环境变量是否生效
可以通过以下方式确认LANG是否正确设置:
- 查看服务的环境变量:
systemctl show script.service --property=Environment - 在Python脚本中添加代码打印环境变量:
import os print(os.environ.get('LANG'))
内容的提问来源于stack exchange,提问作者user18196171
相关产品推荐
相关产品推荐

