Mojolicious - рабочий миньон не запускается автоматически

Я использую полное приложение Mojolicious и загружаю Миньон (серверная часть sqlite). Мой вопрос: почему миньон-воркер не запускается сам по себе, когда я запускаю приложение mojolicious с hypnotoad. Согласно документации Minion, он должен:

Фоновые рабочие процессы обычно запускаются с помощью команды Minion::Command::minion::worker, которая становится автоматически доступной, когда приложение загружает Mojolicious::Plugin::Minion.

Окружающая среда:

  • Red Hat Enterprise Linux Server — 7.5 (Maipo)
  • Перл v5.16.3
  • Mojolicious 8.0 (Суперзлодей)
  • Миньон 9.01

Mojolicious полное приложение

package Apps;

use Moo;
extends 'Mojolicious';

sub startup {
    my $self = shift;

    $self->plugin(Config => file => '/var/www/apps/lib/appconf.perl');
    $self->plugin(Minion => {SQLite => 'sqlite:/var/www/apps/db/minion_backend_sqlite.db'});
    ...
}

Вот как я запускаю свой сервер:

/usr/local/bin/hypnotoad /var/www/apps/script/apps

В настоящее время я запускаю миньона в фоновом режиме (которого через какое-то время тоже убивают, как ни странно) вот так:

/var/www/apps/script/apps minion worker -m production

Спасибо.


person Sachin Dangol    schedule 14.12.2018    source источник
comment
Документация только предполагает, что команда становится доступной, но я думаю, что вы все равно должны запускать работника самостоятельно. Скорее всего воркер останавливается через какое-то время, когда больше нечего делать, но для этого стоит заглянуть в его лог   -  person Corion    schedule 14.12.2018
comment
Спасибо @Корион. Меня смутила документация, так как команда миньонов доступна даже тогда, когда hypnotoad не запущен. Я имею в виду, что /var/www/apps/script/apps minion worker -m production по-прежнему работает нормально, когда приложение не запущено. Я не уверен, есть ли журнал для миньона. Однако, судя по журналу hypnotoad, через некоторое время рабочие были изящно остановлены:   -  person Sachin Dangol    schedule 14.12.2018
comment
пример остановленного рабочего: [Fri Dec 14 13:59:24 2018] [info] Stopping worker 9716 gracefully (120 seconds)   -  person Sachin Dangol    schedule 14.12.2018
comment
Журнал гипножаб относится к работникам Mojolicious. Рабочие миньоны — это отдельные несвязанные процессы, которые вы должны запускать и управлять ими самостоятельно.   -  person Grinnz    schedule 15.12.2018
comment
Спасибо. Я подумал, что может быть какой-то способ управлять миньонами автоматически.   -  person Sachin Dangol    schedule 15.12.2018


Ответы (2)


Как отметили Корион и Гриннц в комментариях:

Рабочие-миньоны — это отдельные несвязанные процессы, которые вы должны запускать и управлять ими самостоятельно.

Хорошие новости:

Команда Mojolicious открыла этот выпуск. Скоро будет решено: разрешить запуск Minion worker сервером приложений

person Sachin Dangol    schedule 15.12.2018

Используя Mojo::IOLoop::Subprocess, вы можете запустить подпроцесс в приложении следующим образом:

my $subprocess = Mojo::IOLoop::Subprocess->new;
$subprocess->run(sub {...}, sub{...})

Документация здесь

Это означает, что вы можете использовать хук before_server_start для запуска рабочих подпроцессов через app->minion->worker->run.

Однако после того, как они начались, кажется, AFAIK, нет простого способа остановить их, когда само приложение останавливается, поэтому вам нужно проверить их и пожинать плоды - вот где Proc::ProcessTable может помочь.

Я собрал все это вместе в быстром и грязном плагине здесь.

person simone    schedule 11.01.2021