Со страницы руководства sudo (версия sudo для Ubuntu)
Существует два различных способа работы с переменными среды.По умолчанию опция env_reset sudoers включена.Это приводит к тому, что команды выполняются с минимальным окружением, содержащим TERM, PATH, HOME, SHELL, LOGNAME, USER и USERNAME в дополнение к переменным из процесса вызова, разрешенного опциями endo_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
Для более старых версий upstart вот что я использовал, чтобы обойти это.
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
прямо здесь, если хотите.