Как поддерживать работу сервера Node JS на виртуальном хостинге

Я хотел протестировать сервер узла в среде общего хостинга.

Я использую сеанс терминала ssh для тестирования.

Сервер работает нормально, но выйти из терминальной сессии, не остановив сервер, конечно же, нельзя.

Используя pm2 (пакет npm), я могу поддерживать работу сервера, но при выходе из сеанса терминала задание pm2 также завершается, что останавливает сервер. Интересно, почему так.

Попытался использовать crontab для запуска сценария оболочки, который, в свою очередь, запускает pm2, который, в свою очередь, запускает сервер узла. Вкладка cron запускается каждую минуту, но сервер узла никогда не запускается.

Сценарий sh работает просто отлично, pm2 работает нормально, и сервер node работает нормально. Что не работает: сохранение работы сервера узла после выхода из сеанса терминала.

Вот сценарий оболочки, который запускает pm2 для запуска сервера узла...

ps cax | grep node > /dev/null
if [ $? -eq 0 ]; then
  echo "Process running."
else
  echo "Process not running."
  PATH=$PATH:/usr/local/bin
  pm2 start '/path/to/NodeServer.js' --restart-delay=100
fi

person WhatsYourFunction    schedule 31.07.2020    source источник
comment
Вы пробовали команду pm2 startup? pm2 пытается обнаружить вашу систему инициализации и рассказать вам, как настроить ее для запуска при загрузке. Затем просто выполните pm2 start ..., а затем pm save. Документы: pm2.keymetrics.io/docs/usage/startup   -  person rudolfbyker    schedule 20.08.2020
comment
Спасибо, rudolfbyke - pm2 start требуется root-доступ к серверу, которого вы не получаете с виртуальным хостингом. На самом деле, хотя pm2 и был установлен, похоже, что он больше не работает, как и npm. Я предполагаю, что хостинг-провайдер — вечно продаваемый VPS-сервис — удалил его, поэтому я не знаю, что какой-либо узел — на этом общем хостинге с этим конкретным провайдером — будет работать.   -  person WhatsYourFunction    schedule 23.08.2020
comment
Только для команды pm2 startup требуется root-доступ, но вы можете компенсировать это с помощью cron или сценария запуска, специфичного для поставщика, если у вашего провайдера есть такая вещь. Я использую npm-g_nosudo для установки глобальных пакетов npm в очень ограниченной среде джейлкита на моего общего хостинга и периодически проверять, что pm2 все еще работает, используя скрипт cron, определенный через веб-интерфейс моего провайдера (ISPConfig).   -  person rudolfbyker    schedule 25.08.2020


Ответы (1)


ps cax | grep node > /dev/null
if [ $? -eq 0 ]; then
  echo "Process running."
else
  echo "Process not running."
  /home/user/.nvm/versions/node/v11.15.0/bin/node /home/user/public_html/node/app.js
fi

Я использовал это в работе cron на общем хостинге GoDaddy, и это работает для меня. До этого я использовал node /home/user/public_html/node/app.js в том же скрипте, но он выдает ошибку из-за пути к узлу. Тем не менее, я могу использовать узел в терминале, но в задании cron я должен использовать полный путь.

person Habib Siddiqui    schedule 29.08.2020
comment
Спасибо, Хабиб, для меня подход cron не сработал хотя бы потому, что хостинг-провайдер, вечно пытающийся увеличить продажи с Shared на VPS-хостинг, запретил использование задания cron каждую минуту. (Они не делают это легко. Кроме того, их дополнительные продажи сработали, - я купил VPS, - но я все равно хотел бы иметь возможность запускать один или два сервера узлов на услуге виртуального хостинга.) Я попробовал подход используя tmux, но он тоже не включен в виртуальный хостинг. До сих пор мои попытки установить tmux без root-доступа не увенчались успехом (Grrr). Еще раз спасибо Хабиб. - person WhatsYourFunction; 02.09.2020
comment
Я использую его в общем хостинге GoDaddy, и он работает нормально. - person Habib Siddiqui; 04.09.2020
comment
Без сомнения, это зависит от ограничений, наложенных хостинг-провайдером. - person WhatsYourFunction; 07.09.2020