在workerman或者webman應(yīng)用重啟時,如何讓crontab和隊列消費執(zhí)行完成后安全退出,防止執(zhí)行一半的情況出現(xiàn)?框架本身有處理嗎?
框架本身有處理的
在 config/server.php
中,設(shè)置 stop_timeout
這個就是安全重啟的超時時間
我們設(shè)置的是30s
如果在30秒內(nèi),沒有執(zhí)行完任務(wù)或者處理完請求,則會強制重啟進程
反之,則會安全重啟
我們之前專門測試過,處理請求過程中,執(zhí)行 php start.php restart -d
,會卡住等待處理請求
然后,安全重啟
我使用php start.php start -d守護進程方式運行時,再php start.php stop就直接報錯了 Fatal error: Uncaught ErrorException: (null)(): supplied resource is not a valid stream resource in Unknown:0
Stack trace:
thrown in Unknown on line 0
Fatal error: Uncaught ErrorException: (null)(): supplied resource is not a valid stream resource in Unknown:0
Stack trace:
thrown in Unknown on line 0
Fatal error: Uncaught ErrorException: (null)(): supplied resource is not a valid stream resource in Unknown:0
Stack trace:
thrown in Unknown on line 0
(null)(): supplied resource is not a valid stream resource in file Unknown on line 0
(null)(): supplied resource is not a valid stream resource in file Unknown on line 0
發(fā)現(xiàn)一個問題,假設(shè)一個定時任務(wù)的執(zhí)行頻率每10秒1次,執(zhí)行耗時是15秒,那么在stop的時候webman會繼續(xù)把虧
欠的執(zhí)行次數(shù)執(zhí)行完才stop,這可能導致stop_timeout耗盡強制中斷