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

时间:2011-08-25 13:54:57

标签: 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

失败
2011-08-25 16:49:29,494 INFO spawnerr: can't find command 'node'

3 个答案:

答案 0 :(得分:12)

您可以使用env:

在命令中添加它
[program:web]
command=env PATH="/path/to/where/node/executable/is" node web.js -c config.json

在某些情况下,环境似乎无效。

答案 1 :(得分:5)

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

e.g。

#!/bin/sh
export EXAMPLE_VARIABLE=something
export PYTHONPATH=/something
export PATH=$PATH:/somewhere/else
exec python somescript.py

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

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

答案 2 :(得分:-2)

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

[program:web]
command=/path/to/where/node/executable/is/node web.js -c config.json