Mojo::IOLoop::ProcBackground - IOLoop interface to Proc::Background
0.06
This is an IOLoop interface to Proc::Background.
From Proc::Background:
This is a generic interface for placing processes in the background on both Unix and Win32 platforms. This module lets you start, kill, wait on, retrieve exit values, and see if background processes still exist.
use Mojolicious::Lite; use Mojo::IOLoop::ProcBackground; use File::Temp; use File::Spec; use Proc::Background; any '/run' => sub { my $self = shift; # Setup our request to take a while Mojo::IOLoop->stream($self->tx->connection)->timeout(30); $self->render_later; $self->on(finish => sub { $self->app->log->debug("Finished"); }); # We want the UserAgent to see something as soon as possible $self->res->code(200); $self->res->headers->content_type('text/html'); $self->write_chunk("<html><body>Starting...<br>\n"); # This is our utility script that will run in the background my $tmp = File::Temp->new(UNLINK => 0, SUFFIX => '.pl'); my $statefile = $self->stash->{_statefile} = File::Spec->catfile(File::Spec->tmpdir, "done"); print($tmp 'sleep(10); $f="$ARGV[0].$$"; open($fh, ">", $f); sleep(3)'); my $script = $tmp->filename; undef($tmp); # Thanks CPAN.. :) The magic happens in Proc::Background my $proc = $self->stash->{_proc} = Mojo::IOLoop::ProcBackground->new; # Every so often we get a heartbeat from the background process $proc->on(alive => sub { my ($proc) = @_; my $pid = $proc->proc->pid; my $statefile = $self->stash->{_statefile} . ".$pid"; if (-f $statefile) { $self->write_chunk("Done</body></html>"); $proc->unsubscribe("alive"); } }); # When the process terminates, we get this event $proc->on(dead => sub { my ($proc) = @_; my $pid = $proc->proc->pid; my $statefile = $self->stash->{_statefile} . ".$pid"; $self->app->log->debug("Done: $statefile"); $self->finish; }); # Start our process $proc->run([$^X, $script, $statefile]); }; # Run the app push(@ARGV, 'daemon', '-l', 'http://*:5555') unless @ARGV; app->log->level("debug"); app->secrets(["I Knos# you!!"]); app->start;
To install Mojo::IOLoop::ProcBackground, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Mojo::IOLoop::ProcBackground
CPAN shell
perl -MCPAN -e shell install Mojo::IOLoop::ProcBackground
For more information on module installation, please visit the detailed CPAN module installation guide.