Назад | Перейти на главную страницу

Как мне использовать sudo из выскочки скрипта?

Я использую выскочку для запуска своего приложения 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]