【问题标题】:How can I start a background process on a remote machine using perl and Net::OpenSSH?如何使用 perl 和 Net::OpenSSH 在远程机器上启动后台进程?
【发布时间】: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


【解决方案1】:

根据Net::OpenSSH manual,您希望将 async => 1 标志赋予 system() 调用。

async => new() 调用上的 1 没有做你认为它可能做的事情

【讨论】:

  • 不错。一旦我在系统中找到异步标志,我就没有读那么远。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 2020-09-17
  • 2017-03-27
  • 2013-11-28
  • 2017-01-14
相关资源
最近更新 更多