我有以下perl脚本:如何在init脚本中获得perl守护进程的PID?
#!/usr/bin/perl
use strict;
use warnings;
use Proc::Daemon;
Proc::Daemon::Init;
my $continue = 1;
$SIG{TERM} = sub { $continue = 0 };
while ($continue) {
# stuff
}
我有我的init脚本如下:
DAEMON='/path/to/perl/script.pl'
start() {
PID=`$DAEMON > /dev/null 2>&1 & echo $!`
echo $PID > /var/run/mem-monitor.pid
}
的问题是,这个返回错误的PID!这将返回守护进程运行时启动的父进程的PID,但该进程立即停止。我需要获得子进程的PID!
查看['Proc :: Daemon']的文档(https://metacpan.org/pod/Proc::Daemon)。有一个选项叫做'pid_file'。 PID将被写入该文件。 –
是的,我知道我可以在Perl中使用这个选项。但是,我想在init脚本中保留这样的功能(创建,删除PID文件),而不是在perl中完成1/2,在init脚本中完成1/2。 – Bintz
您可以尝试在命令行上将shell脚本的文件名传递给Perl脚本,例如'$ DAEMON $ pid_file>/dev/null 2>&1 ....'然后Perl脚本可以使用这个文件名'$ pid_file'来创建pid文件 –