我们有一款开源应用程序,它有三 (3) 项服务。为了回答这个问题,我们将它们称为A,乙, 和C。
现在,必须按照特定顺序关闭它们。该顺序将是 A、B、C。
如果 B 在 A 之前关闭,我们就会遇到各种问题。如果 C 在 B 或 A 之前关闭,情况也是如此。此外,由于使用每个服务的用户数量不同,每个服务的关闭时间也不同。
哦,这需要包装在 DOS 批处理文件中,或者非技术用户只需双击即可启动的程序中。(PowerShell 也不是不可能的,但我从未使用过它)。另外,我是一名 C# 程序员,所以也可以使用它。
无论如何,当重新启动时,需要发生以下情况:
1) Initiate shutdown of service A
2) When service A is down, it should trigger the shutdown of service B
3) When service B is down, it should trigger the shutdown of service C
4) When service C is down, it should trigger the START UP of service A
5) When service A is UP, it should trigger the START UP of service B
6) When service B is UP, it should trigger the START UP of service C
因此,如您所见,每次停止/启动都需要等待前一次停止/启动完全完成后才能继续。由于每项服务可能需要几秒钟到几分钟的时间,因此我们不能使用任何类型的计时技巧。
非常感谢您的建议。
谢谢!
答案1
您可以使用 PowerShell 执行此操作。要停止服务,请使用 Stop-Service 命令。启动服务使用 Start-Service 命令。因此,您可以创建一个脚本,其中包含几个条目,如下所示,用于您需要停止的每项服务,顺序如下:
Stop-Service ServiceA
do { Start-Sleep -Milliseconds 200}
until ((get-service ServiceA).status -eq 'Stopped')
并启动服务:
Start-Service ServiceA
do { Start-Sleep -Milliseconds 200}
until ((get-service ServiceA).status -eq 'Running')
然后,您可以在脚本中将这 6 个代码块串在一起,将其保存为 .ps1 文件,然后从 powershell 提示符运行它,如下所示:
PS C:\> C:\Path\To\Script\script.ps1