Php

如何終止由 Apache 網路伺服器呼叫的後端 PHP 腳本?

  • January 24, 2020

我在 Apache 網路伺服器上呼叫了一些 PHP 後端腳本,這些腳本被程式為執行幾天。問題是我無法找到停止這些腳本的方法(使用 sudo apachectl restart 重新啟動伺服器除外)。

通常我會執行ps -aux | grep script_name獲取PID並殺死它。

但是在這種情況下,當我使用 PHP 執行此操作時(shell_exec("ps -aux | grep script_name")我沒有看到該過程.. 我的假設是,當通過 apache 呼叫腳本時,它會在內部執行它們,因此它們不可見。

任何想法如何檢查哪些腳本正在執行並在需要時中止這些腳本?

好的,根據我從您的評論中獲得的資訊,我認為您正在使用mod_phpapache 模組來包含 php 腳本。這也解釋了為什麼您必須重新啟動 apache,這會殺死所有執行緒,包括 php 執行器。

由於 php 在您的 apache 中作為執行緒執行,因此您將沒有機會使用 kill 等,因為 php 解析器根本不是分叉或單個程序。

最乾淨的解決方案(從我的角度來看)是定期檢查是否設置了標誌。我假設您的腳本做了一些導致延遲的計算量大的事情。您可以將計算工作分成更小的塊。如果是 IO 相關的東西導致延遲,您可能需要拆分或設置超時。

然後定期檢查是否設置了某個標誌(讓它成為數據庫設置、生成文件夾等)。如果是,則使用者請求中止,您甚至可以優雅地停止計算。

您現在需要做的就是定義一個設置標誌的附加腳本。一旦主要工人的終止已經停止並且事情再次整理,不要忘記移除標誌。

引用自:https://serverfault.com/questions/998120