在更新期間,我們希望停止 php-fpm 并等待所有正在運行的腳本完成,然后再進行任何文件更改。我們發現我們需要設置process_control_timeout,所以我們在“/etc/php/7.4/fpm/pool.d/zz-00-overrides.ini”中放置了“process_control_timeout = 36000s”(我們重新啟動了php-fpm)。然后我們創建了一個測試腳本來測試它。我們的測試腳本會創建一個文件,然后 30 秒后,它會創建另一個文件。劇本:$id = random_int(10000, 99999);file_put_contents(__DIR__ . '/' . $id . '-start', '');sleep(30);file_put_contents(__DIR__ . '/' . $id . '-end', '');當我們正常運行腳本時(瀏覽器 -> nginx -> php-fpm),它會創建第一個文件,30 秒后它會創建第二個文件。當我們運行腳本時,等待幾秒鐘,然后嘗試停止它(運行方式和之前一樣:瀏覽器 -> nginx -> php-fpm)(停止方式:“service php7.4-fpm stop”),它將創建第一個文件,然后運行服務停止命令,只需要 2-3 秒,然后瀏覽器顯示“502 Bad Gateway”,然后永遠不會創建第二個文件。它不會優雅地停止。我們想要的結果是“service php7.4-fpm stop”等待所有腳本完成,然后停止,而不是像現在這樣為了強制停止而殺死任何正在運行的腳本。我們錯過了什么,我們做錯了什么嗎?它是某種地方的錯誤嗎?任何幫助將非常感激。Debian 10 (Linux 4.19.0-6-cloud-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64 GNU/Linux)PHP 7.4.2Nginx 1.14.2
1 回答

心有法竹
TA貢獻1866條經驗 獲得超5個贊
運行kill -QUIT $(cat /run/php/php7.4-fpm.pid)
確實考慮了process_control_timeout
配置。一旦所有腳本完成執行,它將導致 PHP-FPM 進程停止。此時,PID 將被刪除。因此,為了使其工作:
跑
$(kill -QUIT $(cat /run/php/php7.4-fpm.pid))
在一個循環中,檢查是否
/run/php/php7.4-fpm.pid
仍然存在,如果不存在,則中斷循環。
- 1 回答
- 0 關注
- 163 瀏覽
添加回答
舉報
0/150
提交
取消