我遇到了一个问题,即使用 RSH 远程启动脚本时端口不足。
我有一个需要运行的脚本,该脚本已推送到每台服务器。我有一个服务器列表(hostfilelist)
基本上,我有一个简单的循环,可以并行运行它们。
for host in `cat hostfilelist`; do
rsh $host ksh script.ksh &
done
问题是有 2k 台服务器,我达到了 512 的限制(假设 RSH 的端口范围是 512-1023,基于我已阅读的文档)。
我怎样才能解决这个问题?
使用您的代码,您不仅会遇到 rsh 的“安全”端口限制,而且您还可能会遇到文件描述符限制(检查ulimit -n);每个网络连接也使用一个文件描述符。
您对代码所做的是通过 hostfilelist 并为每个主机运行一个 rsh 命令,该命令与&符号一起放在后台(在源服务器上)。这些连接中的每一个都在后台保持打开状态,直到远程主机上的脚本完成。
在这种情况下,最好将脚本的执行放在每个远程主机的后台执行,这样您的 rsh 命令会在启动远程作业后立即返回,从而再次释放网络连接(和端口)。为此,请将代码中的第二行重写为
rsh $host "ksh script.ksh &"
但是,如果事情发生得太快,您可能仍然会遇到端口重用问题(请参阅 netstat 输出上的 TIME_WAIT 状态)。
我强烈建议放弃 rsh 并改用 ssh。