1. 程式人生 > >Linux 開機啟動 php socket

Linux 開機啟動 php socket

信息 gateway 腳本 test target 沒有 bus pat class

問題

php socket 服務在服務器重啟後無法自動啟動,需要添加開機啟動腳本。有以下問題

  1. 開機延遲3分鐘後,再啟動socket服務
  2. socket服務有3個模塊需要按照先後順序啟動 register>gateway>business_worker
  3. 每個模塊單獨進程,運行不同的啟動腳本
  4. 啟動腳本是交互式命令,在啟動成功後需要輸入 ctrl-c 結束命令

方案

## 對於開機延遲啟動,可以使用 參考地址 方案

  1. 寫一個實現延時啟動的腳本myscript,在第一行加入如下內容:
    # 用於延時啟動3分鐘
    sleep
    180

  2. 修改文件 /etc/rc.local,增加如下一行:
    nohup /path/myscript &

    nohup xxx & 參見我的另一隨筆

  1. nohup 表示後臺運行
  2. &   是與nohup一起的,表示不受終端關閉信號影響,保持後臺運行。如果沒有&,在終端關閉時,當前終端執行的nohup進程也會被stop

## 交互式命令,模擬輸入 ctrl-c 結束

首先,我需要模擬一個需要使用 ctrl-c 才能退出的腳本,用於測試是否可以工作

備註:使用 kill pid 可以直接退出 需要 ctrl+c

命令的進程。但查詢資料後發現 socket php 腳本支持無交互式命令,或者說可以自動退出。

## 執行順序邏輯

啟動腳本在模塊運行成功後會打印 Input "php test_php.php stop" to stop. Start success. 信息。

在開機啟動腳本中判斷啟動腳本是否包含該信息,以便執行不同邏輯

 1 #!/bin/bash
 2 
 3 # 保存 腳本運行結果
 4 php1_start=$(  5 cd /home/duoxuan/workspace/demo_test &&  6 /usr/bin/php test_php.php  start -d  
7 | grep success |wc -l ) 8 9 # 判斷是否含有success輸出,即是否運行成功 10 if [ $php1_start -gt 0 ];then 11 echo 第一個運行成功 Start success. 12 fi


示例 編寫一個開機延遲啟動腳本名為 start_php-socket_reboot.sh 為其添加運行權限 chmod +x start_php-socket_reboot.sh 直接運行start_php-socket_reboot.sh
第一個運行成功 Start success.
第二個運行成功 Start success.
第三個運行成功 Start success.

將腳本添加到開機啟動中

nohup /workspace/start_php-socket_reboot.sh &

Linux 開機啟動 php socket