PM2 - Автозапуск на Raspbian (Raspberry Pi) не работает

Хорошо, парни,

это сводит меня с ума ... Не могу заставить мое приложение nodejs автозапуск @ boot на Raspberry Pi ...

Машина: Raspberry 2 (Raspbian Jessie)

Пробовал почти все возможные решения, которые я нашел в Google.

Вот что у меня получилось:

Установлен pm2

$ sudo npm install -g pm2

Это установит его как сценарий init.d и запустит приложение от имени пользователя pi.

$ sudo pm2 startup raspberry -u pi
[PM2] Generating system init script in /etc/init.d/pm2-init.sh
[PM2] Making script booting at startup...
[PM2] -raspberry- Using the command:
  su -c "chmod +x /etc/init.d/pm2-init.sh && update-rc.d pm2-init.sh defaults"
[PM2] Done.

Я читал, что сценарий относится к неправильной папке .pm2 (смотрит в корневую папку, а не в папку пользователя), поэтому я изменил это

 $ sudo vi /etc/init.d/pm2-init.sh

Изменен export PM2_HOME="/root/.pm2" на export PM2_HOME="/home/pi/.pm2"

$ cd /opt/mycoolnodeproject

Запуск моего проекта узла с pm2

$ pm2 start server.js -x --name "node-project"

Сохраните активные процессы, чтобы он перезапустил их при перезапуске (если pi выйдет из строя, он автоматически сохранит его при завершении работы)

$ pm2 dump

Итак, теперь сервер запущен и работает нормально ... пока я не перезагружусь! Я думал, что pm2 автоматически запустит мое приложение узла, но по какой-то причине это не так ... :(

Есть идеи, в чем может быть проблема?

Кстати: я тоже пробовал вызвать автозагрузку вот так sudo env PATH=$PATH:/usr/local/bin pm2 startup raspberry -u pi, но это тоже не сработало.

С уважением,

Саша


person Sascha    schedule 25.09.2015    source источник
comment
вы установили pm2 с помощью sudo?   -  person Mia    schedule 30.09.2015
comment
sudo npm install -g pm2   -  person Mia    schedule 30.09.2015
comment
У меня похожие проблемы - хотелось бы знать, удалось ли вам каким-то образом решить вашу проблему.   -  person Mia    schedule 30.09.2015
comment
Конечно, я установил его с помощью sudo. Я не могу установить global deps без sudo.   -  person Sascha    schedule 30.09.2015
comment
вы уже нашли решение?   -  person Mia    schedule 01.10.2015
comment
Неа. Ничего ... :( Также добавил мою проблему к существующей проблеме @ github. Пока ответа нет. :(   -  person Sascha    schedule 02.10.2015
comment
Я тоже пока не получил ответа. Я ненавижу тратить время на эти мелкие детали, которые должны нормально работать - но все же ... пытаюсь понять. До Джесси все работало нормально.   -  person Mia    schedule 02.10.2015
comment
Привет, Миа, хорошо, это интересно. Так это, вероятно, связано с Джесси? Я обновляюсь сразу после установки, поэтому понятия не имел. Хорошо знать!   -  person Sascha    schedule 06.10.2015
comment
Я добавил решение в эту ветку! :)   -  person Sascha    schedule 06.10.2015
comment
ха-ха, это решение, которое я финансирую и разместил там:]   -  person Mia    schedule 07.10.2015


Ответы (5)


Комментарий Мии заставил меня снова проверить список проблем PM2, и кто-то понял, как это сделать! :)

https://github.com/Unitech/pm2/issues/1654

Решение:

sudo pm2 startup systemd -u <username>

Работает как шарм! :)

Саша

person Sascha    schedule 06.10.2015
comment
Это я :) Рад, что помогло. - person Mia; 06.10.2015

Я смог правильно запустить PM2 при загрузке на моем RPi с помощью этой команды:

sudo env PATH=$PATH:/usr/local/bin pm2 startup systemd -u pi --hp /home/pi

Часть --hp /home/pi казалась разницей. Это то, что я не нашел во многих решениях, которые не работали.

person Chris Troutner    schedule 18.12.2016
comment
Попробовав все остальные ответы, этот сработал безупречно. После перезагрузки pm2 теперь запускает cncjs (в моем случае). - person Fusseldieb; 11.02.2020

Я также несколько дней безуспешно искал, но потом у меня получилось, что он работает довольно просто.


  1. В Raspian нажмите «Меню», «Настройки», «Редактор главного меню».
  2. Нажмите «Настройки» и установите флажок «Приложения по умолчанию для LXSession».
  3. Нажмите ОК и закройте редактор главного меню.
  4. Теперь нажмите «Меню» и в разделе «Настройки» выберите «Приложения по умолчанию для LXSession».
  5. Откроется конфигурация LXSession
  6. Нажмите Автозапуск.
  7. В разделе Автозапуск приложений вручную вставьте в командную строку java
  8. нажмите добавить
  9. закройте приложение конфигурации LXSession и перезагрузите пи

ваше Java-приложение должно запускаться после перезагрузки

person Palmeta    schedule 29.02.2016
comment
Джава? Я что-то упускаю? - person Florian Wendelborn; 10.08.2016

Вот обходной путь, основанный на этой статье (предложенный обходной путь мне не помог):

  1. Создайте мини-сценарий запуска init.d, чтобы самостоятельно воскресить процесс pm2

    #! /bin/sh
    # /etc/init.d/pm2
    #
    # help documentation: 
    #https://debian-administration.org/article/28/Making_scripts_run_at_boot_time_with_Debian
    
    pm2 resurrect
    
  2. Сделайте его исполняемым

    chmod 755 /etc/init.d/blah
    
  3. Обновить системные символьные ссылки

    update-rc.d pm2 defaults
    
  4. Перезагрузитесь, перейдите на свой сайт (и посмотрите дату; убедитесь, что браузер не кэширован)

person Bert    schedule 25.03.2017

Я собираюсь описать шаги отладки, которые привели меня к решению, так как я думаю, что это может быть полезно. Если вам просто нужно решение, я предлагаю вам перейти к концу этого ответа.

Этапы отладки

В моем случае я настраивал запуск pm2 следующим образом:

sudo pm2 startup systemd -u pi

И это не сработало. pm2 просто отказался запускаться при загрузке. Чтобы узнать, что происходит, я выполнил эти инструкции.

Затем я взглянул на блоки systemctl:

 systemctl list-units

И увидел эту красную строку на выходе

pm2-pi.service    failed failed    PM2 process manager

Затем я просмотрел соответствующий журнал (обратите внимание на имя пользователя в конце имени файла: pm2- pi).

journalctl -u pm2-pi

Таким образом, причина заключалась в том, что у пользователя pi не было достаточных разрешений на доступ к файлу conf модуля JSON.

May 28 12:36:52 raspberrypi pm2[534]: Error: EACCES: permission denied, open '/root/.pm2/module_conf.json'

Решение

Я мог бы изменить разрешения json, но решил запустить PM2 от имени пользователя root. Если это опасно, дайте мне знать.

sudo pm2 startup -u root
person Marcos R    schedule 28.05.2020