標籤: Centos, supervisor
-
作者帖子
-
中午看到有客戶下完單整個 http://www.weixiaoduo.com 網站就無法訪問了,當時就是一臉懵逼,我還啥危險操作都沒做呢,
難道說是被人黑了?
還是說伺服器欠費宕機了?
又或是安全軟體執行什麼操作導致的?
再有是不是 WordPress 哪個外掛出了問題???
……一系列猜測花了差不多一分鐘時間,然後趕緊先開啟 FTP 進伺服器看了下,發現可以登入那麼就是說伺服器狀態正常沒欠費,然後試著把 WordPress 的外掛目錄改了下名稱,但還是依舊 500 無法訪問。
再來有點兒著急了,因為我們站是實時都有客戶訪問的,上面問題測試完後,考慮要不要重啟伺服器,突然靈光一閃,是不是哪個服務給退出了??????
然後趕緊進 SSH ,試著重啟 Nginx 服務,然後再重啟 PHP 服務,重新整理網頁,可以正常訪問了。
還真就是 PHP 給異常退出的緣故。這此幾分鐘無法訪問,讓我稍微有點兒措手不及,因為從去年更新伺服器到現在還是頭一回因為伺服器軟體退出導致的問題。
那麼還得想辦法解決下,網上找了找發現有個 supervisor 可以進行特定程序的任務守護。
樓下就簡單貼下配置資訊。
#安裝 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 ,功能更加強大。等以後研究
-
作者帖子
- 哎呀,回覆話題必需登入。