我正在使用Mojolicus完整应用程序并加载Minion(后端sqlite(。我的问题是,当我用hypnodad启动mojolicus应用程序时,为什么小跟班不会自己启动。根据文件Minion它应该:
后台工作进程通常使用以下命令启动Minion::Command::Minion::worker,自动可用当一个应用程序加载Mojoliques::Plugin::Minion时。
环境:
- Red Hat Enterprise Linux Server-7.5(Maipo(
- Perl v5.16.3
- Mojolicus 8.0(超级反派(
- Minion 9.01
Mojolicus完整应用程序
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
谢谢。
如Corion和Grinz在评论中所述:
Minion工作进程是独立的、不相关的进程,您必须启动自己管理。
好消息:
Mojolicus团队已经公开了这个问题。将很快解决:允许应用服务器启动Minion工作程序
使用Mojo::IOLoop::Subprocess
,您可以在应用程序中启动子流程,如下所示:
my $subprocess = Mojo::IOLoop::Subprocess->new;
$subprocess->run(sub {...}, sub{...})
此处的文档
这意味着您可以使用before_server_start
挂钩通过app->minion->worker->run
启动worker子流程
一旦它们启动,当应用程序本身停止时,AFAIK似乎没有简单的方法来阻止它们,所以你必须检查它们并收获它们——这就是Proc::ProcessTable可以提供帮助的地方。
我在这里把所有这些放在一个快速而肮脏的插件中。