swoole服務的重啟方式

2021-10-02 19:56:13 字數 2456 閱讀 9881

關於swoole服務的重啟方式

一、程式內的自重啟

1、$server->reload

安全地重啟所有worker/task程序,確保正在執行的任務執行完成後才重啟,master/manager程序不會停止。

bool server-

>

reload

(bool $only_reload_taskworkrer

=false

)$only_reload_taskworkrer 是否僅重啟task程序。

reload有保護機制,當一次reload正在進行時,收到新的重啟訊號會丟棄。

如果設定了user/group,worker程序可能沒有許可權向master程序傳送資訊,這種情況下必須使用root賬戶,在shell中執行kill指令進行

重啟reload指令對addprocess新增的使用者程序無效。

2、$server->stop()停止worker程序。預設是停止當前worker程序。

3、$server->shutdown()

關閉伺服器。

可在worker程序內呼叫來關閉伺服器,如果worker程序內發生致命錯誤或者邏輯錯誤時可這樣做。

客戶端的連線是否會保持,取決於服務的執行模式:

swoole_process:來自客戶端的連線是由master程序管理,worker程序的重啟和異常退出,不會影響連線本身。

swoole_base:客戶端連線直接維持在worker程序中,因此reload時會切斷所有連線。並且base模式不支援reload task程序。

二、外部重啟程式

1、server可以監聽乙個內網埠,然後可以接收遠端的控制命令。

2、使用程式向程序傳送指令。

比如,./server stop | restart | reload | status等。一般我們在更新**後需要restart / reload。

實現方式是,在啟動服務後,將master和manager程序id儲存到檔案pid_file。然後使用

\swoole\process::kill($pid, $signo = sigterm)方法來向master / manager程序傳送訊號。

訊號:

0:可以檢測程序是否存在,不會傳送訊號。

sigterm

: 向主程序/管理程序傳送此訊號伺服器將安全終止。

sigusr1

: 向主程序/管理程序傳送sigusr1訊號,將平穩地重啟所有worker程序。

sigusr2

: 向主程序/管理程序傳送sigusr2訊號,將平穩地重啟所有task程序。

sigkill:強制殺死程序,類似於 kill -

9 *** 。適用於 強制停止/強制重啟 服務。

status

1、判斷 pid_file 中是否儲存了masterpid, managerpid。

2、然後判斷managerpid是否存在,\swoole\process::

kill

(managerpid,0)。

因為manager程序存在,則master程序也存在。

stop

1、先判斷status。

2、如果是強制關閉服務,使用kill -

9 masterpid 或者 \swoole\process::

kill

(masterpid,

sigkill

)。 3、如果是平滑關閉服務:\swoole\process::

kill

(masterpid,

sigterm);

此種方式會等待任務處理完才關閉服務,因此需要while迴圈來判斷masterpid是否

存在 \swoole\process::

kill

(masterpid,

0) 直到master程序不存在才說明停止成功了。

4、然後刪除pid_file檔案。

reload平滑重啟

先判斷status。

向managerpid傳送 sigusr1 指令:\swoole\process::

kill

(managerpid,

sigusr1

)。restart重啟

先判斷status。

呼叫stop指令。

呼叫start指令。

3、使用kill命令向進行傳送訊號

kill -訊號id 程序id

例如,傳送 sigterm 訊號

kill -15 6444

訊號參考

swoole 平滑重啟方案

http服務在開始時設定程序別名 swoole set process name swoole master netstart anp grep 檢視可知 該程序的別名和程序id 可以通過別名獲取程序id pidof 別名 得到 程序id kill usr1 程序id 可以平滑重啟 示例 如下 re...

Centos重啟網路服務的方式總結

重啟網路服務 1.systemd systemctl restart network2.系統服務管理指令碼 etc init.d network restart3.service service network restart在centos8中只能通過nmcli工具,使用啟用網路會話或者連線網絡卡的...

swoole 檔案IO方式

swoole支援2種型別的非同步檔案讀寫io,可以使用swoole async set來設定aio模式 基於linux native aio系統呼叫,是真正的非同步io,並非阻塞模擬。優點 所有操作均在乙個執行緒內完成,不需要開執行緒池 不依賴執行緒執行io,所以併發可以非常大 缺點 只支援drie...