NodeJS навсегда после @reboot

#node.js #nginx #forever

#node.js #nginx #навсегда

Вопрос:

Я работаю с React, и мне нужно, чтобы моя веб-страница была активна после перезагрузки. Поэтому мне нужно навсегда после crontab.

Что я пробовал.

 crontab -e

@reboot ~/reboot.sh
@reboot sudo service nginx restart
  
 #!/bin/bash
cd ~/lacirolnikdev amp;amp; sudo ~/.nvm/versions/node/v14.13.1/bin/forever start -c "/.nvm/versions/node/v14.13.1/bin/npm start" .
cd ~/coinwork amp;amp; sudo ~/.nvm/versions/node/v14.13.1/bin/forever start -c "/.nvm/versions/node/v14.13.1/bin/npm start" .
  

Я пробовал абсолютные пути, sudo и переход к каталогам.
Команды отлично работают, кроме crontab.

Спасибо, Лачи

Комментарии:

1. посмотрите на pm2, даже они предлагают это. тогда это так же просто, как запустить pm2 startup один раз. кстати, вы не должны запускать свое приложение от имени root

Ответ №1:

Лучшим способом запуска процессов после загрузки был бы systemd модульный файл, де-факто стандартный демон инициализации в большинстве дистрибутивов. systemd заботится о запуске вашего приложения, способен отслеживать и перезапускать его при сбоях.

Взгляните на документацию для файлов модулей здесь: https://www.freedesktop.org/software/systemd/man/systemd.unit.html

Это пример для nginx :

/lib/systemd/system/nginx.service

 [Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target
  

Комментарии:

1. У меня нет start-stop-daemon в дистрибутиве AWS, который в данном случае является ключом к ExecStop.