我制作了一个服务器控制外壳,其工作原理如下
- 在中央服务器上运行 master shell。
- 主 shell 异步调用备用服务器上的远程 shell。
- 每个备用服务器 shell 都会写入 '服务器 xxx 完成' 在中央服务器上的同一结果文件上。
- 同时,Master Shell 定期读取结果文件,直到每个服务器都写入 '完毕'。
- 然后,Maste shell 切换负载平衡。
但我不认为在文件上写入并循环解析它不是理想的通信方式。
我的 shell 最大的问题是,如果任何远程 shell 无法写入,主 shell 将永远等待完毕'无论出于什么原因。
环境电压
系统是 Centos7,master shell 运行在bash
. Master 运行每个重新启动的服务器 shell tomcat
,并等待完全启动。如果特定端口已启动,远程 shell 会修改主 shell 通过ssh
命令读取的结果文件。但我不喜欢服务器如何通过awk
和交换信息grep
。我想应该有更好的方法。
问题
在主 shell 在后台执行多个远程 shell 的情况下,交换结果数据的最佳方式是什么?
在上面的工作流程中,如何使主 shell 仅在步骤 #4 成功时才运行步骤 #5,而不使其无限期等待?我想避免普通服务器必须重新启动。
编辑
Master Shell 执行远程 shell 后,它会使用服务器名称运行 while 循环。
结果文件看起来像这样,
server1 RUNNING
server2 RUNNING
server3 RUNNING
掌握 shell greps server1
, server2
,server3
并检查状态是否为RUNNING
,FAILED
或DONE
。
如果它 grep DONE
,shell 会将该服务器从循环中删除。
远程 shell 只是在 tomcat 正常启动时awk
RUNNING
进行。DONE