[英]Is there an easy way to automatically do a php-fpm restart after a 502 gateway timeout on server?
您是否有關於為使用 Wordpress 和 nginx 的更大站點安裝心跳工具的任何有用的鏈接、提示或腳本。如果太多人同時訪問該站點,服務器將關閉。 發生這種情況后,我需要一些東西來立即自動重啟網站。
問候
您的問題是如何在 502 上重新啟動 PHP。我的第一個答案是首先嘗試防止 502 發生。
PHP 可能消耗了太多內存。 我的猜測是您的 php FCGI 子項數量設置得太高。 在您的 init 腳本中,您應該有一個類似 PHP_FCGI_CHILDREN=20 或類似的條目來控制將啟動的 PHP 進程的數量。 我會嘗試減少數量。 如果您可以確定每個 PHP 進程的平均內存(可能使用 top ),那么您可以確定應該運行的最大 PHP 進程數。 例如,如果您有一個 2,000MB 的服務器,並且您的 PHP 進程每個最多消耗 100MB,那么您需要將它們限制為 20。
您可以創建另一個位置並以@ 符號開始名稱。 @ 符號用於“內部”位置。 我喜歡使用 nginx 的http://openresty.org發行版。 它包括 ngx_lua http://wiki.nginx.org/HttpLuaModule模塊。 Lua 是一種腳本語言,可以(除其他外)執行 shell 命令。 例如:
location / { error_page 502 = @php502error; } location @php502error { content_by_lua 'os.execute("/bin/restart-my-php-processes.sh")'; }
os.execute
是阻塞的,所以你要記住這一點......我聽說有人設置了一個 thttpd 來運行腳本。 所以你會在你的 @php502error 位置使用 proxy_pass。
盡管 kaicurry 是正確的,但您應該編輯php.ini
文件以解決問題的根源; 實際回答你的問題:
編輯您的php-fpm.service
文件。 例如,輸入nano /lib/systemd/system/php-fpm.service
。
在[Service]
底部添加以下兩行:
Restart=on-failure
RestartSec=5s
重啟 systemctl: systemctl daemon-reload
。
Php 現在會在失敗時自動重啟。 您應該偶爾檢查日志以確保它不會經常失敗。
您可能還希望對 nginx 執行相同的操作: /lib/systemd/system/nginx.service
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.