Есть ли способ перезапустить процесс pm2 с помощью cron, но только если он еще не запущен?
Я хочу перезапустить свой узел.Js приложение с использованием PM2 через
pm2 restart app.js
использование crontab, но только если приложение еще не запущено (например, если мой сервер разбился и перезапустился, а pm2 не перезапустился).
команда выше перезапускает его в любом случае, даже если он работает.
Как это исправить?
обновление
Я не хочу, чтобы мое приложение перезапускалось, если оно уже запущено. Я хочу, чтобы он перезапустился только если он указан как" остановлен " или если он не работает. Некоторые предложения предлагают написать сценарий bash, но что это будет? Я попробовал следующие параметры, но они либо не работают, либо перезапускают приложение, даже если оно работает.
3 ответов
вместо запуска процесса pm2 в cron запустите bashscript, который проверяет, запущен ли pm2, и перезапускает его, если это не так.
редактировать
попробуйте следующее (возможно, выражение pgrep необходимо настроить, я не знаю точного имени процесса pm2):
#!/bin/bash
pID=$(pgrep -x "pm2")
if [ -n "${pID}" ];
then
#do nothing
echo $pID "already running. not restarting."
else
# start it
echo "restarting"
# put your command to start your process here
fi
лучший способ сделать это-это использовать pm2 startup
команда
http://pm2.keymetrics.io/docs/usage/startup/
чтобы получить автоматически настроенный скрипт запуска для вашей машины, вам нужно ввести следующую команду:
# Detect available init system, generate configuration and enable startup system
pm2 startup
вы можете указать платформу, которую вы используете самостоятельно, если хотите (где платформа может быть одной из указанных выше):
pm2 startup [ubuntu | ubuntu14 | ubuntu12 | centos | centos6 | arch | oracle | amazon | macos | darwin | freebsd | systemd | systemv | upstart | launchd | rcd | openrc]
вывод этой команды может быть рекомендации строка для копирования / вставки со всеми переменными среды и параметрами, настроенными для вас.
пример:
[PM2] вы должны запустить эту команду как root. Выполните следующую команду: судо Су-c "путь ОКР=$путь:/главная/компания "юнитек"/.nvm / версии / узел / v4.3 / bin pm2 startup-u --hp
вам просто нужно скопировать / вставить строку PM2, и сценарий запуска будет настроен для вашей ОС.
как только вы запустите sudo pm2 startup
. Это создаст systemctl service
. Вы можете проверить статус же с помощью
systemctl status pm2-root
по умолчанию служба не настроена на автоматический перезапуск. Вы будете запускать следующие команды
sudo mkdir -p /etc/systemd/system/pm2-root.service.d
а затем создайте имя файла 10_auto_restart_pm2.conf
С содержанием ниже
[Service]
Restart=always
RestartSec=3
после этого выполнить
systemctl daemon-reload
systemctl restart pm2-service
теперь давайте протестируем часть автоматического перезапуска
$ systemctl status pm2-root.service
● pm2-root.service - PM2 process manager
Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/pm2-root.service.d
└─10_auto_restart_pm2.conf
Active: active (running) since Wed 2018-02-28 16:52:19 UTC; 11s ago
Docs: https://pm2.keymetrics.io/
Process: 5014 ExecStop=/usr/local/lib/node_modules/pm2/bin/pm2 kill (code=exited, status=0/SUCCESS)
Process: 5022 ExecStart=/usr/local/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS)
Main PID: 5031 (PM2 v2.10.1: Go)
Tasks: 9
Memory: 24.3M
CPU: 460ms
CGroup: /system.slice/pm2-root.service
└─5031 PM2 v2.10.1: God Daemon (/home/vagrant/.pm2)
теперь мы убиваем процесс вручную и ждем 3 секунды!--13-->
$ kill -9 5031
$ sleep 3
$ systemctl status pm2-root.service
● pm2-root.service - PM2 process manager
Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/pm2-root.service.d
└─10_auto_restart_pm2.conf
Active: active (running) since Wed 2018-02-28 16:52:55 UTC; 641ms ago
Docs: https://pm2.keymetrics.io/
Process: 5057 ExecStop=/usr/local/lib/node_modules/pm2/bin/pm2 kill (code=exited, status=0/SUCCESS)
Process: 5081 ExecStart=/usr/local/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS)
Main PID: 5088 (PM2 v2.10.1: Go)
Tasks: 9
Memory: 24.3M
CPU: 461ms
CGroup: /system.slice/pm2-root.service
└─5088 PM2 v2.10.1: God Daemon (/home/vagrant/.pm2)
как вы можете видеть, процесс / служба была перезапущена автоматически. Никакой cron не нужен, и это то, как вы должны это делать.
то, что вы хотите сделать, это запустить любые остановленные приложения без простоя. Хорошим решением является использование