9

我正在尝试设置supervisor.conf. 我的一个应用程序需要 node.js,但系统没有安装 node。此外,因为它需要绑定到端口 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'
4

3 回答 3

12

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

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

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

于 2013-11-13T22:32:01.953 回答
5

我开始与主管一起使用的一种模式(类似于 zenbeni 的模式)是使用 shell 脚本来启动我正在运行的任何程序,该程序允许设置环境变量等。

例如

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

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

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

于 2014-11-04T21:42:47.833 回答
-1

您可以设置命令的绝对路径:

[program:web]
command=/path/to/where/node/executable/is/node web.js -c config.json
于 2011-08-25T14:00:34.247 回答