我有不同的进程需要按顺序运行,但它们位于两台不同的服务器上。简而言之,我想做的是:1. 在服务器 A 上运行进程 1 2. 在服务器 B 上运行进程 2 3. 在服务器 A 上运行进程 3
但第一个过程必须完成,第二个过程才能开始。
两台服务器具有 SSH 连接。我想使用 cron 启动全局进程。但我不想使用 crontab 启动它们中的每一个,并且在它们之间等待很长时间,只是为了确保在启动第二个之前完成第一个。换句话说,我如何才能从本地脚本启动远程服务器上的进程,等待远程脚本完成后再继续下一行?
答案1
这是工作流软件的常见特性。
我想,你可以自己做,但是你必须考虑如果第二台主机不可用时该怎么办,如果下一个间隔到来时初始 cronjob 仍在运行该怎么办,等等。不久之后,当多部分/多主机进程的一部分出现故障时,你就需要流控制、分支和其他逻辑。
最明显的即兴答案(并且很可能充满其自身的错误)是通过在原始 cronjob 中附加 ssh 命令来附加第二阶段的启动。
您可能必须在主机之间设置 ssh 密钥以允许从初始主机自动登录。
第二种选择是以某种方式在主机之间传递状态信息,例如第二台主机定期拾取原始主机上的标志文件等。我通常认为这不太可取,因为它涉及轮询,但似乎不需要企业级解决方案,否则这将发布在 serverfault 上。
答案2
你可能想要类似的东西RPC,其中每台机器只是告诉另一台机器它已经完成了一项任务,应该运行下一项任务。您还可以将主脚本放在一台机器上,包含在另一台机器上运行命令的部分,有点“内联”。ssh
将在远程机器上运行命令;最简单的形式是:
ssh <host> <command>