1. 程式人生 > 實用技巧 >平滑重啟

平滑重啟

  1. 平滑重啟的上層指令在Linux中需要使用nohup進行,並指定輸出log的檔案及其位置,在指令末尾記得把“&”符號加上,如下:
alexander@alexander-desktop:~/Documents/Refers/SwooleLive/server/thinkphp/script/bin/server$ nohup php /home/alexander/Documents/Refers/SwooleLive/server/thinkphp/script/bin/server/ws.php > /home/alexander/Documents/Refers/SwooleLive/server/thinkphp/script/bin/server/ws.log & 
  1. nohup 英文全稱 no hang up(不掛起),用於在系統後臺不掛斷地執行命令,退出終端不會影響程式的執行。nohup命令,在預設情況下(非重定向時),會輸出一個名叫 nohup.out 的檔案到當前目錄下,如果當前目錄的 nohup.out 檔案不可寫,輸出重定向到 $HOME/nohup.out 檔案中。

  2. nohup的語法格式是:

nohup Command [ Arg … ] [ & ]
  1. 在上面的案例中,終端輸出“nohup: ignoring input and redirecting stderr to stdout”屬正常現象,表明重定向成功。

  2. 開啟程序之後,下次需要重啟時只需要執行平滑重啟指令碼即可實現,本案例所撰寫的平滑重啟的指令碼基於swoole框架,使用shell寫出,如下:

echo "loading..."
pid=`pidof live_master`
echo $pid
kill -USR1 $pid
echo "loading success"

  1. 這裡的-USR1就是用於重啟swoole的worker程序的訊號,還有類似於sigterm、sigusr2這類訊號。而live_master則是在swoole中定義的程序別名,swoole裡面提供了 swoole_set_process_name(/*string*/ $processName);這個方法來定義程序別名,只需要在onStart回撥裡面執行即可定義,如下:
     /**
     * @param $server
     */
    public function onStart($server)
    {
        swoole_set_process_name("live_master");
    }
  1. 定義好程序別名並寫好平滑重啟指令碼之後即可儲存退出,用shell執行剛剛寫好的這個平滑重啟shell指令碼即可,如下:
sh reload.sh



作者:艾孜爾江