伺服器 PHP 自動退出導致網站無法訪問幾分鐘,給 Centos 安裝 supervisor 進行程序守護。

標籤: ,

  • 該話題包含 1 個回覆,1 人參與,最後由詩語 更新於 6 年前
正在檢視 2 個帖子:1-2 (共 2 個帖子)
  • 作者
    帖子
  • 詩語
    管理員
    • 文章數量: 5,929
    @feibisi
    樓主

    中午看到有客戶下完單整個 http://www.weixiaoduo.com 網站就無法訪問了,當時就是一臉懵逼,我還啥危險操作都沒做呢,

    難道說是被人黑了?
    還是說伺服器欠費宕機了?
    又或是安全軟體執行什麼操作導致的?
    再有是不是 WordPress 哪個外掛出了問題???
    ……

    一系列猜測花了差不多一分鐘時間,然後趕緊先開啟 FTP 進伺服器看了下,發現可以登入那麼就是說伺服器狀態正常沒欠費,然後試著把 WordPress 的外掛目錄改了下名稱,但還是依舊 500 無法訪問。

    再來有點兒著急了,因為我們站是實時都有客戶訪問的,上面問題測試完後,考慮要不要重啟伺服器,突然靈光一閃,是不是哪個服務給退出了??????

    然後趕緊進 SSH ,試著重啟 Nginx 服務,然後再重啟 PHP 服務,重新整理網頁,可以正常訪問了。

    還真就是 PHP 給異常退出的緣故。這此幾分鐘無法訪問,讓我稍微有點兒措手不及,因為從去年更新伺服器到現在還是頭一回因為伺服器軟體退出導致的問題。

    那麼還得想辦法解決下,網上找了找發現有個 supervisor 可以進行特定程序的任務守護。

    樓下就簡單貼下配置資訊。

    詩語
    管理員
    • 文章數量: 5,929
    @feibisi
    樓主
    #安裝 setuptools
    yum install python-setuptools
    
    #安裝 supervisor
    easy_install supervisor
    
    #測試安裝是否成功:
    echo_supervisord_conf
    #上面語句若輸出配置檔案資訊表示安裝成功
    
    #建立 supervisor 配置檔案
    echo_supervisord_conf > /etc/supervisord.conf
    
    #修改配置檔案:
    #在 supervisord.conf 最後增加:
    [program:php]
    command = php                   ; 需要執行的命令
    autostart=true                   ;supervisor 啟動的時候是否隨著同時啟動
    autorestart=true               ; 當程式跑出 exit 的時候,這個 program 會自動重啟
    startsecs=1                    ; 程式重啟時候停留在 runing 狀態的秒數
    startretries=3                   ; 啟動失敗自動重試次數,預設是 3
    redirect_stderr=true           ; 把 stderr 重定向到 stdout,預設 false
    stdout_logfile=/mnt/hgfs/htdocs/logs/stdout.log     ;stdout 日誌檔案
    stderr_logfile=/mnt/hgfs/htdocs/logs/stderr.log
    
    # 佇列消費
    [program:queue_dispose]
    command                 = /usr/local/php/bin/php /alidata/www/artisan queue:work  --daemon --sleep=3 --tries=3
    process_name            = %(program_name)s_%(process_num)s
    numprocs                = 6 ; 啟動 6 個程序
    autostart               = true
    autorestart             = true
    stdout_logfile          = /alidata/log/php/supervisor_queue_dispose_out.log
    stdout_logfile_maxbytes = 10MB
    redirect_stderr=true
      
    [program:dsj_spider]
    command=/usr/local/php/bin/php  /mnt/hgfs/htdocs/www.test.com/index.php
    autostart=false
    autorestart=false
    startsecs=1                ; 啟動 1 秒後沒有異常退出,就當作已經正常啟動了
    startretries=3
    redirect_stderr=true
    stdout_logfile=/mnt/hgfs/htdocs/logs/stdout.log
    stderr_logfile=/mnt/hgfs/htdocs/logs/stderr.log
    
    #除以上將程序配置新增到 supervisord.conf 檔案中
    #推薦將各個程序配置放到單獨的檔案中,然後透過 [include] 配置項引用
    [include]
    files = /etc/supervisor/*.conf
    
    #其他配置具體看/etc/supervisord.conf 檔案
    #supervisor 服務啟動
    supervisord -c /etc/supervisord.conf
    
    #supervisor 服務客戶端管理
    supervisorctl
    
    # 重新啟動配置中的所有程式
    sudo supervisorctl reload 
    
    # 終止配置中的所有程序
    
    sudo supervisorctl stop all
    
    # 啟動配置中的所有程序
    sudo supervisorctl start all

    亮點:web 管理介面

    supervisor 提供 web 管理頁面,可以在網頁端對程序進行監控,啟動,終止,重啟等操作

    將 supervisord.conf 中 [inet_http_server] 部分做相應配置,在 supervisorctl 中 reload 即可啟動 web 管理介面

    [inet_http_server]           ; inet (TCP) server disabled by default
    port=192.168.10.129:9001     ; 外網 ip(ip_address:port specifier, *:port for all iface)
    username=xxxxxxx             ; (default is no username (open server))
    password=xxxxxxx             ; (default is no password (open server))

    在瀏覽器開啟網址 192.168.10.129:9001,輸入上面賬號 xxxxxxx 密碼 xxxxxxx,即可進入 web 管理頁面:

    注意:

    1 、每次修改配置檔案後需進入 supervisorctl,執行 reload, 改動部分才能生效

    2 、 Supervisor 主要有兩個命令:
    supervisord : 啟動 supervisor 的伺服器端
    supervisorctl:啟動 supervisor 的命令列視窗,在該命令列中可執行 start 、 stop 、 status 、 reload 等操作。

    3 、 php 指令碼執行報’BACKOFF Exited too quickly (process log may have details)’ 錯誤解決:
    對於執行時間很短的 php 指令碼,點選程序執行會報以上錯誤

    
    <?php
    require 'db.class.php';
    
    $dbHost = 'localhost';
    $dbUser = 'xxxxxx';
    $dbPasswd = 'xxxxxx';
    $dbName = 'test';
    
    $pdo = db::getInstance($dbHost, $dbUser, $dbPasswd, $dbName);
    
    $pdo->insert('test', ['name' => 'wml']);
    
    sleep(2);   #在 php 指令碼最後一行加上一句,可解決該問題

    supervisor 缺點:

    1. 單機監控
    2. 只能從 supervisor 啟動的程式才能監控,從其他地方啟動的無法監控
    可以使用阿里雲監控 supervisord 程序, supervisord 程序 監控各子程序

    其他監控工具如 monit ,功能更加強大。等以後研究

正在檢視 2 個帖子:1-2 (共 2 個帖子)
  • 哎呀,回覆話題必需登入。

話題資訊

  • 當前位於:功能改進
  • 1 條回覆
  • 1 個參與人
  • 最後回覆:<a href="https://bbs.weixiaoduo.com/users/feibisi/" title=" 檢視詩語的個人資料" class="bbp-author-link"><span class="bbp-author-name"> 詩語</span></a>
  • 上次活動:<a href="https://bbs.weixiaoduo.com/topic/30795/#post-30796" title=" 回覆至:伺服器 PHP 自動退出導致網站無法訪問幾分鐘,給 Centos 安裝 supervisor 進行程序守護。">6 年前</a>