Вопрос Запуск процесса демона с выскочкой


Я запускаю свое приложение на VPS под Ubuntu 12.04 LTS.

И у меня проблема с одним процессом daemon для одного из моих приложений. Этот процесс называется «delayed_job» (если он не знаком - это просто обработчик фоновых задач).

Проблема с этим процессом в том, что иногда его убивают (я полагаю, это потому, что у меня ограниченное количество ОЗУ на моем сервере - всего 1 ГБ).

Но главная проблема в этом заключается в том, что это не способный перезагрузки снова после сигнала аварии или «убить», в отличие от «единорога» (это сервер приложений Rails), которые всегда получают перезагрузку независимо от того, что с ними происходит.

И да, это очень важно, потому что многие функции приложения используют фоновые задачи.

Такая же история происходит, когда в VPS выполняются работы по обслуживанию (инициированные владельцем VPS), и после перезапуска процесс «delayed_job» больше отсутствует в системе.

Это команда, которую я запускаю каждый раз, чтобы ее загрузить: RAILS_ENV=production script/delayed_job start

Это хорошо известная проблема, но единственным решением, которое я нашел в Интернете, является эта статья: http://www.alexreisner.com/code/upstart что предполагает использование функции «выскочки» Linux с опцией «респауна», которая может перезагрузить процесс, если он будет убит или разбит.

Несмотря на то, что статья немного устарела, я узнал, что Ubuntu 12.04 должен поддерживать эту функцию, и я создал символическую ссылку в /etc/init (я назвал его: delayed_job.conf) в файл «delayed_job», который я бы поместил в одну из моих папок приложений (точнее, имя приложения / config). Я сделал все, что говорится в этой статье.

Моя проблема: когда я пытаюсь загрузить этот новый процесс (start delayed_job) в консоли я получаю:

delayed_job start/running, process 6000

Но на самом деле процесс «delayed_job» вообще не создается.

И статус (status delayed_job) процесса initctl: delayed_job stop/waiting

После выполнения kill -9 6000 я получил -bash: kill: (6000) - No such process

Таким образом, это означает, что ничего не выполняется. Я пытался использовать это много раз в разных условиях - ничего, безрезультатно. Просто не работает.

Есть ли что-нибудь, что я мог бы попытаться заставить его работать, или это просто бесполезно?


4
2018-02-23 19:11


происхождения




ответы:


Похоже, что ваша строфа EXPECT неверна или нет. Upstart отслеживает неправильный pid. См. Поваренную книгу для получения инструкций по использованию ОЖИДАТЬ, Обратите внимание на предупреждение о том, насколько важно понимать этот раздел.

Обратите внимание, что если ваше приложение слишком forky (что означает, что он вилки более чем в два раза) для Upstart для отслеживания своего pid, вы можете отслеживать его самостоятельно. Приложение может иметь механизм для записи файла pid, или вы можете его захватить с помощью start-stop-daemon, Видеть это ответьте на пример, в частности, файл pg_agent.conf.

Редактировать:

Обратите внимание: если Upstart не сможет отслеживать pid вашего приложения, вы не сможете использовать RESPAWN строфа. В этом случае Upstart может не соответствовать вашим потребностям. Возможно, конкурирующий продукт вроде foreverбудем. Не знаю.


4
2018-02-25 17:45



Да. Я вообще не использовал «ожидаю» строфы. Благодаря! Я взгляну! - Dmitri
Ну, теперь «start» и «stop» работают, но процесс «delayed_job» не загружается (согласно ps aux | grep «delayed_job»). Я попробовал оба варианта: fork и daemon - не работает. - Dmitri
Что это число вилок? - Brian.D.Myers
я должен считать это с помощью strace? Что делать, если оно больше 2 (deamon)? - Dmitri
Да, считать с strace. См. Последнее предложение моего отредактированного ответа для идей, если оно> 2. - Brian.D.Myers