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