2015-08-24 1 views
12

Когда я запускаю приложение Nodejs с pm2, другие пользователи сервера не могут получить доступ к этому процессу.Как запустить pm2, чтобы другие пользователи сервера могли получить доступ к этому процессу?

Даже если я начинаю PM2 из пользовательского каталога (не текущего пользователя ~/, какая пм2 используется по умолчанию):

HOME=/var/www pm2 start app.js 

Каталог доступен любому пользователю (по сравнению с ~/, но есть до сих пор никто другой пользователь сервера не может получить доступ к этому процессу.

Когда другой пользователь сервера делает pm2 list, он показывает, что он работает 0, но есть (запущен другим пользователем). И когда другой пользователь пытается выполнить HOME=/var/www pm2 list, CLI выдает ошибку:

events.js:72 
    throw er; // Unhandled 'error' event 
     ^
Error: connect EACCES 
    at errnoException (net.js:905:11) 
    at Object.afterConnect [as oncomplete] (net.js:896:19) 

Так что я интересно, как убедиться, что пользователи могут получить доступ PM2 процессы запускаются другими пользователями сервера? Или к нему подойти по-другому?


Я задаюсь вопросом, почему каждый пользователь сервер способен сделать git pull развернуть последнюю версию исходного кода из репозитория Git, но не может перезапустить процесс pm2 потом? Только пользователь, который начал pm2, смог перезапустить его ... Странно.

+0

Один экземпляр pm2 принадлежит только пользователю, который его запустил. – soyuka

ответ

0

Я столкнулся с аналогичной проблемой. Причина может заключаться в том, что у вас нет необходимых разрешений, или у вас нет файлов pid и sock, созданных pm2. В моем случае это работало нормально, когда я начал pm2 из командной строки вместо запуска. Когда я использовал запуск, он запускался как пользователь root по умолчанию. Итак, корень был владельцем pid, sock files

+0

Шринат, что вы имеете в виду, начиная с pm2 из стартапа? Запуск сервера? Я всегда начинаю pm2 из CLI, но не как пользователь root. Однако, поскольку пользователь находится в группе sudoers. –

+0

Возможно, есть способ изменить разрешения pid, sock files? Таким образом, другие пользователи (sudoers, если это имеет значение) имеют разрешение на просмотр запущенных процессов pm2? –

+0

Я хочу сказать, что пользователь, которому выдано сообщение об ошибке при запуске, не имеет права доступа к файлам pid pm2. PM2 запускается разными пользователями. –

5

Вот как мы обошли это.

Просто создать группу

  • Создать новую группу pm2 или любые другое имя работает для вас

    $ groupadd pm2

  • Изменения владелец группы /var/www/ папки группы pm2

    $ chgrp -R pm2 /var/www

  • Добавить другого пользователя, скажем, боб, чтобы PM2

    $ usermod -aG pm2 bob

Теперь боб может работать PM2 команды, изменяя $ HOME в /вар/WWW

$ env HOME=/var/www pm2 list

Или (лучше еще) создать псевдоним в качестве @jcollum предложен

$ alias pm2='env HOME=/var/www pm2'

+0

Это сработало для меня. Другое дело - это псевдоним PM2, так что 'env HOME' был включен во все вызовы pm2. – jcollum

4

кажется, что PM2 сохраняет данные в разделе «~/.pm2» папку пользователя, так что другие пользователи не могут видеть ваш процесс PM2 с «статусом PM2».

Я создал новый пользователь Линукса для PM2, и все пользователи используют «су pm2user» перед началом процесса PM2:

$ sudo su pm2user 
$ sudo pm2 start app.js 

Это глупый способ, но он прост и работает хорошо. Надеюсь, это поможет :)

1

Предполагая, что вы бежите pm2 как www-data. Чтобы получить доступ к этому экземпляру pm2, я делаю: sudo -u www-data HOME=/var/www pm2 list например. Вы можете, конечно, создать сценарий (например, supm2), который сделает это за вас, поэтому вы можете просто сделать supm2 list.

3

Ок, вот мое решение той же задачи:

  1. Создать PM2 домашний каталог: sudo mkdir /opt/pm2
  2. Создать пользователю PM2: sudo useradd -d /opt/pm2 -M -r -s /bin/false pm2
  3. Добавить все необходимые пользователям в PM2 группа: sudo usermod -aG <username>
  4. Установленный владелец из /опт/пм2: sudo chown pm2:pm2 /opt/pm2
  5. Изменение разрешений: sudo chmod 770 /opt/pm2
  6. Установить переменную окружения (я использую /и т.д./окружающей среды): PM2_HOME=/opt/pm2
  7. Установка PM2: sudo npm install pm2 -g.Шахта префикс npm установлен в /usr/local.
  8. Пробег sudo pm2 startup. Он будет генерировать сценарий запуска для вашей системы (в моем случае это Ubuntu Server).
  9. Открыть скрипт запуска (опять же, в моем случае это /etc/init.d/pm2-init.sh) и редактируем следующие переменные USER=pm2 ... export PM2_HOME="/opt/pm2"

В моей Raspberry PI меня вопрос с сокет наследование прав доступа к файлам, они установлены только для чтения для группы вместо RWX применяется к домашней директории: srwxr-xr-x 1 pm2 pm2 0 Sep 11 17:27 pub.sock srwxr-xr-x 1 pm2 pm2 0 Sep 11 17:27 rpc.sock

После нескольких часов прибегая к помощи я наконец нашел решение: я добавил следующую строку в скрипт запуска: umask 0002 и получил его: srwxrwxr-x 1 pm2 pm2 0 Sep 11 17:27 pub.sock srwxrwxr-x 1 pm2 pm2 0 Sep 11 17:27 rpc.sock

Все это.

+0

Перед установкой необходимо установить переменную 'PM2_HOME'? Я уже установил pm2 и хотел бы избежать повторной установки ... –

+0

Вы можете установить его в любое время, Марк. Он просто указывает на домашний каталог PM2. –

+0

Только проблема, которую я нашел, каждый раз, когда перезапуск службы pm2 перезаписывает ОЧЕНЬ важные файлы pub.sock и rpc.sock, и вы потеряете доступ 770, который вы установили. Эти файлы должны быть обновлены при каждом перезапуске. – Nicholi

Смежные вопросы