各位朋友,
我正在尝试将某些东西移到 docker 容器中,这意味着将其从作为守护进程运行转变为由 Supervisord 控制的独立进程。现在我对 Supervisord 不太熟悉,所以这可能是我的一个简单配置错误。
问题源于此应用程序需要设置某些环境变量。当作为守护进程运行时,我会通过 bash 脚本设置它们
#!/bin/bash
ORACLE_HOME=/home/oracle/app/
TNS_ADMIN=/home/oracle/app/network/admin
export ORACLE_HOME TNS_ADMIN
export LD_LIBRARY_PATH=$PATH:/home/oracle/app/lib
ncftpd_authd
在supervisord.conf中我将其设置为
[program:authd]
environment=ORACLE_HOME="/home/oracle/app/",TNS_ADMIN="/home/oracle/app/network/admin",export ORACLE_HOME TNS_ADMIN,export LD_LIBRARY_PATH="$PATH:/home/oracle/app/lib"
command=/usr/local/sbin/ncftpd_authd
stdout_events_enabled=true
stderr_events_enabled=true
但是如果我调用supervisord -c /etc/supervisord.conf 我得到一个错误
[root@0d7f9a5d7c3a src]# supervisord -c /etc/supervisord.conf
Error: Unexpected end of key/value pairs
我相信这与环境行有关,就好像我注释说我们的supervisord将启动(但authd不会运行)。我在supervisord conf文件中设置环境时做错了什么?
答案1
environment
应为键/值对列表,这意味着它不应包含export
。正确的值应为:
environment=ORACLE_HOME="/home/oracle/app/",TNS_ADMIN="/home/oracle/app/network/admin",LD_LIBRARY_PATH="$PATH:/home/oracle/app/lib"
您可能还需要用$PATH
其值替换。或者,您可以遵循从外向内编写变量的标准http://supervisord.org/configuration.html?highlight=environment。简而言之,要使用$PATH
,只需写入%(ENV_PATH)s
。然后,它将是这样的:
environment=ORACLE_HOME="/home/oracle/app/",TNS_ADMIN="/home/oracle/app/network/admin",LD_LIBRARY_PATH="%(ENV_PATH)s:/home/oracle/app/lib"