Ответ 1
Из sudo man page (версия Ubuntu sudo)
Существует два разных способа решения переменных окружения. По умолчанию, env_reset sudoers опция включена. Это приводит к выполнению команд с минимальной средой, содержащей TERM, PATH, HOME, SHELL, LOGNAME, USER и USERNAME в дополнение к переменным из процесса вызова разрешено параметрами env_check и env_keep sudoers. Фактически существует белый список для переменные среды.
Sudo перезагружает среду. Это расстраивающий аспект использования su
и sudo
в сценариях upstart или init. Недавние версии поддержки upstart с указанием uid/gid без использования sudo с помощью директив setuid/setgid
, как в приведенном ниже примере. Также обратите внимание на использование chdir
.
start on filesystem and started networking
respawn
chdir /var/www/yourapp
setuid yourapp
setgid yourapp
env NODE_ENV=production
env PATH=/usr/local/bin:/usr/bin:/bin
env CUSTOM=somevalue
exec /usr/local/bin/node app.js | /usr/bin/multilog s1024000 /var/log/yourapp 2>&1
Для более старых версий выскочки, вот что я использовал, чтобы обойти это.
description "start and stop the example.com node.js server"
start on filesystem and started networking
respawn
chdir /path/to/your/code
exec su -c 'PATH=$PWD/node/bin NODE_ENV=$(cat node_env.txt) ./node/bin/node app/server.js' www-data >> tmp/stdout.log 2>&1
Обратите внимание, что я просто поместил файл node_env.txt
в свой корневой каталог приложения, который устанавливает режим работы, потому что Я ненавижу переменные окружения. Вы можете просто сделать NODE_ENV=production
прямо там, если хотите.