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