我将ZFS遠端複制從主要主機複制到從屬主機,在那裡我在主要主機上運作一個Perl腳本.
對于每個檔案系統,它ssh到遠端主機并以偵聽模式啟動mbuffer,然後腳本繼續執行,然後發送資料.成功時,mbuffer應該自行退出.
問題
通過ssh在遠端主機上啟動mbuffer,然後能夠在腳本中繼續是非常困難的.我最終做了下面可以看到的事情.
問題在于,直到腳本退出,腳本都會留下< defunct>每個檔案系統處理一個.
題
可以避免< defunct>過程?
sub mbuffer {
my ($id, $zfsPath) = @_;
my $m = join(' ', $mbuffer, '-I', $::c{port});
my $z = join(' ', $zfs, 'receive', , $zfsPath);
my $c = shellQuote($ssh, $::c{slaves}{$id}, join('|', $m, $z));
my $pm = Parallel::ForkManager->new(1);
my $pid = $pm->start;
if (!$pid) {
no warnings; # fixes "exec" not working
exec($c);
$pm->finish;
}
sleep 3; # wait for mbuffer to listen
return $pid;
}