【发布时间】:2012-11-05 07:05:56
【问题描述】:
我正在尝试使用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-server 提示
- 如果我输入 ctrl-C,则 perl 脚本会继续,并且 jmeter-server 进程会正常启动。
我尝试了使用和不使用 async 参数的 Net::OpenSSH->new() 调用,我还尝试在命令上使用 nohup,没有任何区别。
我怎样才能消除对ctrl-c 的需要,以便脚本可以在无人值守的情况下运行?
【问题讨论】:
-
您想在 perl 脚本完成后保持远程程序运行还是仅在它运行时保持运行?
-
@salva:我希望它在脚本完成后继续作为后台任务运行。
-
那么,您必须使用
system方法并使用nohup将所有stdio 通道重定向到/dev/null 运行命令:"nohup $program >/dev/null 2>&1 </dev/null &" -
成功了!把它写成答案,我会接受的。
标签: perl background-process remote-access cpan openssh