0

我遇到了一个问题,即使用 RSH 远程启动脚本时端口不足。

我有一个需要运行的脚本,该脚本已推送到每台服务器。我有一个服务器列表(hostfilelist)

基本上,我有一个简单的循环,可以并行运行它们。

for host in `cat hostfilelist`; do
rsh $host ksh script.ksh &
done

问题是有 2k 台服务器,我达到了 512 的限制(假设 RSH 的端口范围是 512-1023,基于我已阅读的文档)。

我怎样才能解决这个问题?

4

1 回答 1

0

使用您的代码,您不仅会遇到 rsh 的“安全”端口限制,而且您还可能会遇到文件描述符限制(检查ulimit -n);每个网络连接也使用一个文件描述符。

您对代码所做的是通过 hostfilelist 并为每个主机运行一个 rsh 命令,该命令与&符号一起放在后台(在源服务器上)。这些连接中的每一个都在后台保持打开状态,直到远程主机上的脚本完成。

在这种情况下,最好将脚本的执行放在每个远程主机的后台执行,这样您的 rsh 命令会在启动远程作业后立即返回,从而再次释放网络连接(和端口)。为此,请将代码中的第二行重写为

rsh $host "ksh script.ksh &"

但是,如果事情发生得太快,您可能仍然会遇到端口重用问题(请参阅 netstat 输出上的 TIME_WAIT 状态)。

我强烈建议放弃 rsh 并改用 ssh。

于 2012-10-05T20:11:58.153 回答