【问题标题】:Check if the same powershell script is already running and run it later if yes检查相同的 powershell 脚本是否已经在运行,如果是,请稍后运行
【发布时间】:2021-05-14 15:29:58
【问题描述】:

我通过远程服务器上的 ssh (apache) Powershell 脚本从我的 Java EE 应用程序调用,该脚本无法并行运行,因此我需要检查该脚本是否已经在运行并等待直到没有进程并运行该脚本等待脚本。脚本可能会被多次调用,例如。几秒钟内 20 次,所有这些都需要一个一个地运行。

知道如何实现这一点,或者这是否可能?谢谢!

【问题讨论】:

    标签: windows powershell shell scripting


    【解决方案1】:

    我在一些脚本中实现这一点的方法是使用锁定文件

      $lockFile = "$PSScriptRoot\LOCK"
        if (-not (Test-Path $lockFile)) {
            New-Item -ItemType File -Path $lockFile | Out-Null
           
            #  Do other stuff...
        
            Remove-Item -Path  $lockFile -Force
        }
    

    你可以修改成这样的吗?

    $lockFile = "$PSScriptRoot\LOCK"
    while (Test-Path $lockFile)
    {
        Start-Sleep -Seconds 2
    }
    
    New-Item -ItemType File -Path $lockFile | Out-Null
    
    #  Do other stuff...
    
    Remove-Item -Path  $lockFile -Force
    

    【讨论】:

    • 这个,注册表中的标志,或应用程序数据库中的标志字段都是此类事情的常见解决方案。它的一个问题是你需要一种方法来强制它重置标志,因为如果运行进程的线程崩溃,那么它不会取消设置,并且你的系统不能再将任务排队。
    • 是的,不幸的是存在这种风险。 OP,请查看解决方案 here 以及
    • 谢谢丹尼尔,效果很好!很抱歉回复晚了,我专注于其他任务,我现在才回到这个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-05
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多