PostgreSQL coub express.js freeware git jquery laravel links linux macos mysql node.js php powershell python ubuntu vim virtualbox анекдот блог игры интересно стихи цитаты

Forever: перезапуск приложений с одинаковым названием стартового скрипта
October 20, 2014
Есть такая приблуда forever, если говорить коротко о её назначении - логирование ошибок и автоматический перезапуск приложения после его падения.
Собственно эта заметка о том как перезапускать приложение при помощи forever, если рядом запущено ещё одно приложение с таким же именем запускающего приложение скрипта. Обычно проще всего убивать по имени, но вот так получилось что имена скриптов у меня перекрылись и перезапуск одного приложения стал вызывать смерть других. Логично, на помощь приходит uid, который позволяет каждому приложению присвоить понятно что, и таким образом решить "проблему" с уникальностью имен скриптов, запущенных одновременно на одной машине.
Пример скрипта для перезапуска приложения по uid
#!/bin/bash
APP_DIR="/home/user/app-folder"
FOREVER="/usr/local/bin/forever"
APP_UID=appUniqUid
DAEMON=$FOREVER" --append --uid $APP_UID start --spinSleepTime 10000 --minUptime 1000 --sourceDir "$APP_DIR
APP_SCRIPT="app.js"

## vars for app env
export APP_PORT=4433
export NODE_ENV=production
####

echo -n "Stopping $APP_SCRIPT: "
$FOREVER stop $APP_UID && echo 'ok, stoped' || echo 'error on stop node app'
echo -n "Starting $APP_SCRIPT: "
$DAEMON $APP_SCRIPT && echo 'ok, started' || echo 'error on start node app'
Теперь в консоли можно выполнить
forever list
и увидеть искомый uid.
Зачем это вообще надо, ведь forever сам должен уметь перезапускать всё и после деплоя и после падения?? Должен, да, но вот бывает такая фигня, когда после деплоя взлетает всё криво, или по каким-то другим причинам приложению требуется насильная перезагрузка. А вспоминать как там рулить forever в таких случаях мне лень. Я лентяй, поэтому я написал этот скриптик.

Comments

No comments here yet.
You have to login to post a new comment.
aghr