在Linux中启动和停止Perl守护进程
我一直在为linux开发perl守护进程,下面是它的框架:在Linux中启动和停止Perl守护进程,linux,perl,daemon,Linux,Perl,Daemon,我一直在为linux开发perl守护进程,下面是它的框架: #!/usr/bin/env perl use File::Copy; use Socket; use Sys::Hostname; use POSIX qw(setsid); use Env; use Sys::Info::Constants qw( :device_cpu ); my $daemonName = 'proc'; my $proc; my $error; my $file = "Proc.pl"; my $pid
#!/usr/bin/env perl
use File::Copy;
use Socket;
use Sys::Hostname;
use POSIX qw(setsid);
use Env;
use Sys::Info::Constants qw( :device_cpu );
my $daemonName = 'proc';
my $proc;
my $error;
my $file = "Proc.pl";
my $pidfile = ">/var/run/proc.pid";
my $pid2check = "/var/run/proc.pid";
my $pid;
if (!$error) {
LogMessage("$daemonName : PID $proc : Begin");
}
if (!$error) {
LogMessage("$daemonName : PID $proc : Writing pid information to $pidfile");
print FILE $proc . "\n";
close (FILE);
}
$SLEEP_TIME = 5; # seconds
#Main loop of Daemon
while (!$error) {
sleep($SLEEP_TIME);
}
if ($error) {
LogMessage("$file : PID $proc : Error $error");
}
LogMessage("$file : PID $proc : END");
exit(0);
sub Daemonize {
if (!(chdir '/')) {
$error .= "Can't chdir to /: $!";
}
if (!(umask 0)) {
$error .= "Unable to umask 0";
}
unless (open STDIN, '/dev/null') {
$error .= "Can't read /dev/null: $!";
}
open(OLD_OUT,">&STDOUT");
#All print statments will now be sent to our log file
unless (open STDOUT, '>>/var/log/proc.log') {
$error .= "Can't read /var/log/proc.log: $!";
}
#All error messages will now be sent to our log file
unless (open STDERR, '>>/var/log/proc.log') {
$error .= "Can't write to /var/log/proc.log: $!";
}
defined($pid = fork);
#Exit if $pid exists (parent)
if ($pid)
{
print OLD_OUT "Service successfully installed.\n";
exit(0);
}
#As Child
setsid();
$proc = $$;
return ($proc);
}
#Prints log messages
sub LogMessage {
my $message = $_[0];
print localtime() . " $message\n";
}
我对perl比较陌生,我想知道启动和停止这个守护进程最简单的方法是什么?另外,我如何检查以确保它没有已运行的实例?一般来说,daemonisation是使用该方法完成的。这是一个常见的习惯用法,你应该考虑使用它。pid或锁定文件通常用于确保一次只运行一个实例 如果您计划将其作为一个系统流程使用,也可以使用类似或的方法来为您进行流程管理和“一次只做一件事”