supervisord 配置文件中环境变量设置注意事项
最近在配置 supervisord 时遇到错误,原配置文件为:
[program:dbus]
command=/usr/bin/dbus-daemon --session --nofork --address=unix:path=/run/user/1001/bus
autostart=true
autorestart=true
user=lzc
environment=DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus,XDG_RUNTIME_DIR=/run/user/1001
报错信息如下:
Error: Unexpected end of key/value pairs in value 'DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1001/bus,XDG_RUNTIME_DIR=/run/user/1001' in section 'program:dbus' (file: '/etc/supervisor/conf.d/dbus.conf')
这个错误是因为 supervisord
配置中 environment=
的语法要求很严格: 必须用逗号分隔的 key="value"
对,不能直接使用未加引号的字符串中带有 :
或 /
等特殊字符。
supervisord
把你写的环境变量值当作逗号分隔的多个键值对;- 它看到
unix:path=/run/user/1001/bus
,以为这是key=unix
,后面再尝试解析path=/run/user/1001/bus
,结果失败; - 根本原因是值中含有逗号、冒号,没有加引号。
[program:dbus]
command=/usr/bin/dbus-daemon --session --nofork --address=unix:path=/run/user/1001/bus
user=lzc
autostart=true
autorestart=true
environment=DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1001/bus",XDG_RUNTIME_DIR="/run/user/1001"