我有以下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文件 –