Я использую выскочку для запуска своего приложения node.js в экземпляре Amazon Linux AMI EC2. У меня было несколько проблем с его работой, которые кратко описаны ниже.
В моем сценарии у меня была такая строка:
exec sudo -u www /usr/local/bin/node /var/www/foo/app.js >> /var/log/foo.sys.log 2>&1
При запуске работа никогда не проходила stop/waiting
, и когда я включил log-priority debug
Я видел эту строку:
sudo: sorry, you must have a tty to run sudo
Я оказался в эта почта говоря о visudo
и почему мне не следует его использовать и как он рекомендует использовать --session-command
вместо. Поэтому я изменил строку на:
exec su --session-command="/usr/local/bin/node /var/www/foo/app.js >> /var/log/foo.sys.log 2>&1" www
Журнал теперь говорит (sys) Starting
но initctl status foo
все еще говорит foo stop/waiting
.
В этот момент я не уверен, что делать, чтобы это работало, любая помощь будет принята с благодарностью.
Обновление: я закончил это сообщение от SO и результаты такие же.
В: «Как мне использовать sudo
из выскочки (или любого другого сценария запуска / инициализации системы)? "
A: «Не надо».
Sudo действительно разработан для интерактивного использования (отсюда и you must have a tty to run sudo
message) - это не тот инструмент, который можно использовать в неинтерактивных сценариях запуска.
Чтобы делать то, что вы хотите, требуется немного взлома, потому что Upstart не поддерживает запуск заданий в качестве непривилегированных пользователей (пока - надеюсь, однажды они исправят эту проблему). Вопрос был спросил и ответил на SuperUser, но я воспроизведу его здесь, поскольку он одинаково ценен для системных администраторов:
Если спросить на канале #upstart на freenode, официальный взгляд на этот вопрос таков:
В будущих версиях Upstart это будет встроенная поддержка, но пока вы можете использовать что-то вроде:
exec su -s /bin/sh -c 'exec "$0" "$@"' username -- /path/to/command [parameters]