標籤: 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 ,功能更加強大。等以後研究
-
作者帖子
- 哎呀,回覆話題必需登錄。