App::CLI::Plugin::Proc::PID::File - for App::CLI::Extension pidfile plugin module
1.3
# MyApp.pm package MyApp; use strict; use base qw(App::CLI::Extension); # extension method __PACKAGE__->load_plugins(qw(Proc::PID::File)); # extension method __PACKAGE__->config( proc_pid_file => { verify => 1, dir => "/var/run", name => "myapp" } ); 1; # MyApp/Hello.pm package MyApp::Hello; use strict; use feature ":5.10.0"; use base qw(App::CLI::Command); sub run { my($self, @args) = @_; # make pid file (/var/run/myapp.pid) # /var/run/myapp.pid is automatically deleted (by Proc::PID::File::DESTROY) $self->pf->touch; }
App::CLI::Extension pidfile plugin module
pf method setting
__PACKAGE__->config( proc_pid_file => {%proc_pid_file_option} );
Proc::PID::File option is Proc::PID::File please refer to
return pidfile path
Example:
# MyApp::Hello(App::CLI::Command base package) sub run { my($self, @args) = @_; say $self->pf->path; }
return Proc::PID::File object.
Specify the process ID of the file that describes the default Proc::PID::File in the specified or default values are applied, dir, name, but you may specify a combination of an optional extension to specify the pidfile possible.
--pidfile command line option if you also have to be defined by the specified module, --pidfile file path specified in the process ID can also be used as a file that describes the
Example1. Proc::PID::File pidfile config
# in MyApp.pm __PACKAGE__->config( proc_pid_file => { pidfile => "/tmp/myapp.pid", ############################### # Following equivalent ############################### # dir => "/tmp", # name => "myapp" } );
Example2. pidfile option
myapp --pidfile=/tmp/myapp.pid
1. Make MultiBoot Lock Plugin
Example
package MyApp::Plugin::MultiLauncherLock; use strict; use feature ":5.10.0"; sub prerun { my($self, @argv) = @_; if ($self->pf->alive) { my $pid = $self->pf->read; die "already " . $self->argv0 . "[$pid] is running"; } $self->pf->touch; $self->maybe::next::method(@argv); } 1;
2. Load MyApp::Plugin::MultiLauncherLock
# in MyApp.pm __PACKAGE__->load_plugins(qw( Proc::PID::File +MyApp::Plugin::MultiLauncherLock ));
3. Make MyApp::Run
package MyApp::Run; use strict; use feature ":5.10.0"; sub run { my($self, @args) = @_; sleep 60; say "end"; }
4. first execute
# 60 seconds after the "end" to exit and output myapp run
5. second execute first execute run to run the same script again before the end of the
myapp run
Running a dual 2 "already myapp [$pid] is running" is output, and end with exit code 1
package MyApp::Plugin::OldProcessKill; use strict; use feature ":5.10.0"; use POSIX qw(SIGTERM SIGINT SA_RESTART sigaction); sub prerun { my($self, @argv) = @_; my $set = POSIX::SigSet->new(SIGTERM, SIGINT); my $act = POSIX::SigAction->new(sub { my $signal = shift; die "signal $signal recevied..."; }, $set, SA_RESTART); my $old_act = POSIX::SigAction->new; sigaction(SIGTERM, $act, $old_act); sigaction(SIGINT, $act, $old_act); if ($self->pf->alive) { my $pid = $self->pf->read; kill SIGTERM, $pid; say "old process " . $self->argv0 . "[$pid] is killed"; } $self->pf->touch; $self->maybe::next::method(@argv); } 1;
2. Load MyApp::Plugin::OldProcessKill
# in MyApp.pm __PACKAGE__->load_plugins(qw( Proc::PID::File +MyApp::Plugin::OldProcessKill ));
myapp run old process myapp[9999] is killed
first execute process is killed and dying message "signal TERM recevied..."
App::CLI::Extension Class::Accessor::Grouped Proc::PID::File
Akira Horimoto
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Copyright (C) 2010 Akira Horimoto
To install App::CLI::Plugin::Proc::PID::File, copy and paste the appropriate command in to your terminal.
cpanm
cpanm App::CLI::Plugin::Proc::PID::File
CPAN shell
perl -MCPAN -e shell install App::CLI::Plugin::Proc::PID::File
For more information on module installation, please visit the detailed CPAN module installation guide.