如何使用perl和Net::OpenSSH在远程机器上启动后台进程?

如何使用perl和Net::OpenSSH在远程机器上启动后台进程?,perl,background-process,remote-access,cpan,openssh,Perl,Background Process,Remote Access,Cpan,Openssh,我正在尝试使用Net::OpenSSH登录到远程计算机,并启动后台进程 my $ssh = Net::OpenSSH->new( $username . "\@" . $host, key_path => $key, async => 1); $ssh->error and die "Open ssh error: " . $ssh->error; my $out = $ssh->system("nohup ./apache-jmeter-2.8/bin/

我正在尝试使用
Net::OpenSSH
登录到远程计算机,并启动后台进程

my $ssh = Net::OpenSSH->new( $username . "\@" . $host, key_path => $key, async => 1);

$ssh->error and die "Open ssh error: " . $ssh->error;

my $out = $ssh->system("nohup ./apache-jmeter-2.8/bin/jmeter-server > /dev/null &");

print $out;
当它运行时,它会登录到机器,我会得到jmeter服务器提示
-如果输入ctrl-C,那么perl脚本将继续,jmeter服务器进程将正确启动

我尝试了
Net::OpenSSH->new()
调用,使用和不使用async参数,我还尝试在命令上使用nohup,没有任何区别

如何消除对
ctrl-c
的需要,使脚本可以在无人参与的情况下运行?

根据,您希望为system()调用提供async=>1标志


new()调用上的async=>1没有执行您认为它可能会执行的操作

您希望在perl脚本完成后保持远程程序运行,还是仅在它运行时保持远程程序运行?@salva:我希望它在脚本完成后作为后台任务继续运行。然后,您必须使用
system
方法,并使用
nohup
运行命令,将所有stdio通道重定向到/dev/null:
“nohup$program>/dev/null 2>&1,这很有效!将其作为一个答案写下来&我会接受它。很好。一旦在系统中找到异步标志,我就没有读那么深了。:-)