【问题标题】:Powershell script to restart Apache Process用于重新启动 Apache 进程的 Powershell 脚本
【发布时间】:2015-08-15 02:41:19
【问题描述】:

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

在下面的脚本中,我是否需要使用 start-sleep 命令行开关,如果需要,最好将其放置在哪里以及让它休眠多少秒?

$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 可能有 2 个或更多进程,Get-Wmi 会将它们返回为 httpd、httpd#1、httpd#2、....
我问这个的原因是循环将检查这些进程的工作集,所以想象有 3 个已处理返回:httpd、httpd#1 和 httpd#2,并且 httpd#1 和 httpd#2 都已达到阈值. 请注意,在循环中,我正在重新启动 service,这将重新启动进程。由于我的 2 个 httpd 进程已达到阈值,因此我将重新启动服务 2-ice。我试图确保即使有多个进程达到阈值,服务重启也只会发生一次。不确定 start-sleep 是否可以解决这个问题,或者是否有更好的方法。

非常感谢。

【问题讨论】:

  • 你不需要让这个脚本休眠,它不会重新运行。您需要安排它定期运行。
  • 对不起,我忘了提。是的,它计划每分钟自动运行 2-3 次。我已经更新了我的帖子。非常感谢。
  • @Neossian 还请注意脚本是一个循环。 Apache 可能有多个进程在运行,例如 httpd, httpd#1, httpd#2, ...
  • 我看到了循环,但它运行了一次,完成了它需要做的事情,然后就死了。你不会得到一个失控的循环,因为你所有的循环都是有限的。我不确定你想通过开始睡眠来完成什么?
  • @Neossian 我添加了一个更新来解释我想要做什么。非常感谢。

标签: apache powershell apache2.2


【解决方案1】:
$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;
    }
}

【讨论】:

  • 我发现像上面那样从 Powershell 启动/停止服务可能不是一个好主意。更好的方法是使用 httpd -k restart 优雅地重新启动它。所以,对于那些可能需要这样的东西,而不是上面的 3 行(停止服务,启动服务),将它们替换为对 httpd.exe 的调用,如下所示:C:\your\path\to\Apache\bin \httpd.exe -k restart -n "YOURSERVICENAME" -f "C:\your\path\to\Apache\conf\httpd-YOURNAME.conf";.如果您使用默认服务名称,则只需包含“-n”之后的所有内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 2017-07-06
  • 2013-02-16
  • 1970-01-01
  • 1970-01-01
  • 2020-03-07
相关资源
最近更新 更多