如何为supervisord设置PATH,以便找到可执行文件

Emi*_*nov 9 python shell environment-variables supervisord

我正在尝试设置supervisor.conf.我的一个应用程序需要node.js,但系统未安装节点.此外,因为它需要绑定到端口80,所以它需要以root身份运行.如何修改PATH变量,以便supervisord可以找到node可执行文件(位于目录中)并运行node.js应用程序.


我想这样做

[supervisord]
environment=PATH=/path/to/where/node/executable/is

[program:web]
command=node web.js -c config.json
Run Code Online (Sandbox Code Playgroud)

这失败了

2011-08-25 16:49:29,494 INFO spawnerr: can't find command 'node'
Run Code Online (Sandbox Code Playgroud)

zen*_*eni 12

您可以使用env在命令中添加它:

[program:web]
command=env PATH="/path/to/where/node/executable/is" node web.js -c config.json
Run Code Online (Sandbox Code Playgroud)

似乎环境在某些情况下不起作用.

  • 如果您使用bash脚本或其他在当前`$ PATH`上进行中继的内容,则无法应用此功能.在我的情况下,我需要从virtualenv目录中运行sentry并且它不起作用但是在设置`command = env PATH ="/ path/to/virtualenv/bin:%(ENV_PATH)s"sentry start`之后它完美地工作了并保留环境PATH. (4认同)

小智 5

我开始使用supervisor(类似于zenbeni)的模式是使用shell脚本启动我正在运行的任何程序,允许设置环境变量等.

例如

#!/bin/sh
export EXAMPLE_VARIABLE=something
export PYTHONPATH=/something
export PATH=$PATH:/somewhere/else
exec python somescript.py
Run Code Online (Sandbox Code Playgroud)

使用'exec'很重要.它将/ bin/sh替换为正在执行的程序,而不是将其作为子项生成.这意味着周围没有任何其他过程,并且信号也按预期工作.

这比zenbeni方法的(小)优势在于,当更新环境变量等时,它只需要重新启动管理程序,即不需要重新读取/更新等.如果您遇到与我相同的错误(完全重启主管以更新事件监听器环境变量),则在使用事件监听器时,此优势会变得更大.


jte*_*ace -1

您只需设置命令的绝对路径即可:

[program:web]
command=/path/to/where/node/executable/is/node web.js -c config.json
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,-1 没有回答这个问题。为什么设置 PATH 不起作用和/或如何修复它? (6认同)