我正在编写一个perl脚本,它启动几个不同服务器上的脚本使用ssh。远程脚本需要,只要运行,因为这脚本运行:Perl的反引号/系统给出“tcsetattr:输入/输出错误”
#!/usr/bin/perl
require 'config.cfg'
#@servers is defined in config.cfg
#Contains server info as [username,hostname]
#
# @servers = ([username,server1.test.com],[username,server2.test.com])
#
foreach $server (@servers) {
my $pid = fork();
if ($pid == 0) {
$u = ${$server}[0];
$h = ${$server}[1];
print "Running script on $h \n";
print `ssh -tl $u $h perl /opt/scripts/somescript.pl`;
exit 0;
} else {
die "Couldn't start the process: $!\n";
}
}
[...]
当我运行该脚本,我得到下面的输出:
./brokenscript.pl
Server01上运行脚本
$ tcsetattr:输入/输出错误
与server01的连接已关闭。
与system
一起运行时会发生相同的结果(因为我希望输出脚本,反引用是首选。当我在命令行反引号之间运行确切的命令时,它完全按预期工作。这是什么造成的?
星期一我来试试你的建议。在等待:远程脚本永远运行直到它们在这个脚本被杀时被杀死,所以我不认为我需要等待它们。但我将不得不进行调查。 – 2011-05-14 14:39:06