代码之家  ›  专栏  ›  技术社区  ›  pixel

用于重新启动Apache进程的Powershell脚本

  •  0
  • pixel  · 技术社区  · 9 年前

    一旦Apache进程达到内存阈值,我将使用powershell脚本重新启动Apache服务。 该脚本将按任务管理器中的计划每分钟运行2-3次。

    在下面的脚本中,我需要使用start sleep commandlet吗?如果需要,最好将其放置在哪里,以及使其休眠多长时间?

    $Threshold = 200 * 1024 * 1024;     # Bytes (209,715,200 bytes = 0.195GB)
    $ServiceName = my service name;
    
    Get-WmiObject -ComputerName "localhost" -Class Win32_PerfFormattedData_PerfProc_Process | where { $_.Name -like "httpd*" } | foreach {
        $procobj = $_;
    
        if($procobj.workingset -gt $Threshold)
        {  
            stop-Service $ServiceName;
    
            start-Service $ServiceName;
    
            $stamp = Get-Date
            echo $($stamp + " Started service: " + $ServiceName);
            #sleep 5;  //Do I need this and if so, where should it be placed?
        }
    }
    

    更新 Apache可能有两个或多个进程,Get-Wmi会将它们返回为httpd、httpd#1、httpd#2。。。。
    我问这个问题的原因是,循环将检查这些进程的工作集,因此假设返回了3个已处理的进程:httpd、httpd#1和httpd#2,想象httpd#1与httpd#2都已达到阈值。 注意,在循环中,我正在重新启动 服务 这将重新启动过程。由于我的两个httpd进程已达到阈值,我将重新启动服务2-ice。我试图确保服务重启只发生一次,即使多个进程达到阈值。不确定开始睡眠是否能解决这个问题,或者是否有更好的方法。

    非常感谢。

    1 回复  |  直到 9 年前
        1
  •  0
  •   Neossian    9 年前
    $Threshold = 200 * 1024 * 1024;     # Bytes (209,715,200 bytes = 0.195GB)
    $ServiceName = my service name;
    
    Get-WmiObject -ComputerName "localhost" -Class Win32_PerfFormattedData_PerfProc_Process | where { $_.Name -like "httpd*" } | foreach {
        $procobj = $_;
    
        if($procobj.workingset -gt $Threshold)
        {  
            stop-Service $ServiceName;
    
            start-Service $ServiceName;
    
            $stamp = Get-Date
            echo $($stamp + " Started service: " + $ServiceName);
            break;
        }
    }