Приложение nodejs с навсегда в cronjob не работает после перезагрузки

Я создал cronjob с sudo crontab -u USERNAME -e и пытался запускать приложение node.js после каждой перезагрузки.

На другом сервере все работало.

Но на этот раз я установил Node.js через nvm

Потом пробовал запускать те же строки cronjob, но каждый раз после перезагрузки не получалось. Я попытался выяснить все связанные папки и снова попытался запустить как разные строки. Когда я проверяю с помощью forever list, сервер показывает, что ни один процесс не запущен.

@reboot /home/USERNAME/.npm/forever start -c /home/USERNAME/.nvm/current/bin/node  /home/USERNAME/APPNAME/app
@reboot /home/USERNAME/.npm/forever start  /home/USERNAME/APPNAME/app
@reboot /usr/local/bin/forever start -c /home/USERNAME/.nvm/current/bin/node  /home/USERNAME/APPNAME/app

Я думаю, что причина как-то связана с nvm. Но я не уверен в этом. Я не хочу делать ничего лишнего, пока не буду полностью в этом уверен.


person Rephisto    schedule 25.07.2015    source источник


Ответы (2)


Отредактировано 26 июля 2015 г.

Хотя я использовал модуль Forever npm для развертывания производственных приложений nodejs, я действительно не вижу необходимости использовать его на серверах на базе Linux, поскольку доступно так много альтернатив системного уровня.

Один из них выскочка. Это поможет вам запускать ваши скрипты как сервисы системного уровня. Amazon Web Services также использует выскочку в своих уровнях nodejs Elastic Beanstalk, чтобы приложения nodejs работали вечно.

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

Однако он не ограничивается только развертыванием приложений nodejs, и если вы изучите выскочку, вы сможете делать с ним много вещей. Вот ссылка для этого.

person Noman Ur Rehman    schedule 25.07.2015
comment
which node --> /home/USERNAME/.nvm/versions/v0.12.7/bin/node which forever --> /usr/local/bin/forever я проверил оба пути и создал 2 разные строки для cronjob. но ничего не произошло. есть ли другой способ сделать это без использования команды @reboot? @reboot /usr/local/bin/forever start -c /home/USERNAME/.nvm/versions/v0.12.7/bin/node /home/USERNAME/APPNAME/app.js @reboot /usr/local/bin/forever start /home/USERNAME/APPNAME/app.js - person Rephisto; 25.07.2015
comment
@Rephisto Я отредактировал свой ответ. Пожалуйста, отметьте / проголосуйте, если это было полезно. - person Noman Ur Rehman; 26.07.2015
comment
@Rephisto Ты нашел решение для этого? Я тоже не могу сделать эту работу. Я использую что-то вроде: @reboot /root/.nvm/versions/node/v7.1.0/bin/node /home/user/test.js - person daniel; 13.12.2017

Если ваш первоначальный подход был предпочтительнее (как в моем случае), вы можете исправить свое запланированное задание cron, явно передав путь к узлу следующим образом: (найдено в этот ответ)

@reboot /root/.nvm/versions/node/v7.1.0/bin/node /root/.nvm/versions/node/v7.1.0/bin/forever start /var/www/server.json

По-видимому, NVM работает волшебно, устанавливая некоторые системные пути, которые не настроены в момент запуска заданий cron.

person Jason Sperske    schedule 15.11.2016
comment
У меня такая же проблема и все еще не работает @reboot /root/.nvm/versions/node/v7.1.0/bin/node /home/user/test.js - person daniel; 13.12.2017