我如何让主pipe作为另一个用户来运行我的程序?

使用超级环境variables来运行我的命令的主pipe有很多麻烦。

我的主pipeconf。

; supervisor config file [unix_http_server] file=/var/run//supervisor.sock ; (the path to the socket file) chmod=0700 ; sockef file mode (default 0700) [supervisord] logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log) pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid) childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP) user = a-user-name environment = HOME='/home/a-user-name',APP='staging.example.com',SYMFONY_ENVIRONMENT='staging' ; the below section must remain in the config file for RPC ; (supervisorctl/web interface) to work, additional interfaces may be ; added by defining them in separate rpcinterface: sections [rpcinterface:supervisor] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///var/run//supervisor.sock ; use a unix:// URL for a unix socket ; The [include] section can just contain the "files" setting. This ; setting can list multiple files (separated by whitespace or ; newlines). It can also contain wildcards. The filenames are ; interpreted as relative to this file. Included files *cannot* ; include files themselves. [include] files = /etc/supervisor/conf.d/*.conf files = /home/a-user-name/apps/staging.example.com/current/app/Resources/config/supervisor/*.conf 

~/apps/staging.example.com/current/app/Resources/config/supervisor under-version-control.conf

 [program:hank-message-forwarder] stdout_logfile = /var/log/pink-tie/%(program_name)s-out.log stderr_logfile = /var/log/pink-tie/%(program_name)s-err.log logfile_maxbytes = 50MB logfile_backups = 10 identifier = hank-message-forwarder command = %(ENV_HOME)s/apps/%(ENV_APP)s/current/bin/hank forward-messages tcp://*:5500 tcp://*:5600 

我在这里做错了什么? 我得到的错误根本没有帮助。 这是抱怨,它不能连接到UNIX服务器,但一旦我删除的filesuserenvironment指令(所有我已经基本上改变)都恢复正常。

但一旦我删除的filesuserenvironment指令(所有我已经基本上改变)都恢复正常。

听起来像你有一个语法问题。 引用在线文档后 … user条目看起来不错。 user = a-user-name但是这个environment对我来说看起来很奇怪。 尝试将您的单引号改为双引号。

从这改变它;

environment = HOME='/home/a-user-name',APP='staging.example.com',SYMFONY_ENVIRONMENT='staging'

对此;

environment = HOME="/home/a-user-name",APP="staging.example.com",SYMFONY_ENVIRONMENT="staging"

编辑:

我只是注意到你有一个“ files= ”行中的星号。 这在实践中我没有见过(我只指定了完整的文件名)。 但在线文档确实显示通配符(“*”和“?”)。

但是,在线文档提到了以下内容(强调增加);

如果configuration文件包含[include]部分,则它必须包含一个名为“files” 密钥 。 该键中的值指定了要包含在configuration中的其他configuration文件。

没有实际的细节。 想到一个想法。 除非该用户具有足够的权限,否则不能以其他用户身份运行进程。

所以问题在于你,supervisord是以root身份还是以低权限用户身份运行?