0

我正在使用Mojolicious完整应用程序并加载Minion(后端 sqlite)。我的问题是为什么当我用hypnotoad启动 mojolicious 应用程序时,minion worker 不会自行启动。根据Minion文档,它应该:

后台工作进程通常使用命令 Minion::Command::minion::worker 启动,当应用程序加载 Mojolicious::Plugin::Minion 时该命令会自动可用。

环境:

  • 红帽企业 Linux 服务器 - 7.5 (迈坡)
  • Perl 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

谢谢你。

4

2 回答 2

4

正如 Corion 和 Grinnz 在评论中提到的:

Minion workers 是独立的不相关的进程,你必须自己启动和管理。

好消息:

Mojolicious 团队已经打开了这个问题。即将解决: 允许应用服务器启动Minion worker

于 2018-12-15T17:42:37.790 回答
0

使用Mojo::IOLoop::Subprocess您可以像这样在应用程序中启动子进程:

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

文档在这里

这意味着您可以使用before_server_start钩子通过以下方式启动工作子进程app->minion->worker->run

一旦它们开始,尽管似乎 AFAIK 在应用程序本身停止时没有简单的方法来阻止它们,所以你必须检查它们并收获它们——这就是Proc::ProcessTable可以提供帮助的地方。

我在这里把所有这些都放在了一个快速而肮脏的插件中。

于 2021-01-11T11:09:37.027 回答