問題:supervisorctl restart 服務名 失敗 案例: [root@node203 ~]# supervisorctl statusetcd-server-97-203 RUNNING pid 7706, uptime 14:29:46kube-apiserver-97-203 FA ...
問題:supervisorctl restart 服務名 失敗
案例:
[root@node203 ~]# supervisorctl status
etcd-server-97-203 RUNNING pid 7706, uptime 14:29:46
kube-apiserver-97-203 FATAL Exited too quickly (process log may have details)
查看supervisor日誌:
tail -f /var/log/supervisor/supervisord.log
entered FATAL state, too many start retries too quickly
說明:從報錯信息看出,是該服務重啟次數太多,因為在配置中有參數:
startretries = 5
這個參數是在服務重啟失敗後,嘗試重啟的次數,所以supervisor一直在重啟,然後一直失敗,達到最大次數就報以上的錯誤
查看kube-apiserver服務日誌:
error: failed to create listener: failed to listen on 127.0.0.1:8080: listen tcp 127.0.0.1:8080: bind: address already in use
提示監聽埠已存在,這時候我們執行以下操作:
netstat -tnlp
ps -ef|grep api-server
果然,該進程並沒有完全停止,可以臨時採用kill 進程號停止,然後再supervisorctl start 服務名,成功
或者
為了避免在重啟的時候出現埠存在(預設supervisord不會stop子進程),需要在/etc/supervisord.d/*.ini 該服務的.ini配置文件中添加以下兩項:
stopasgroup=true
#這個東西主要用於,supervisord管理的子進程,這個子進程本身還有,子進程。那麼我們如果僅僅幹掉supervisord的子進程的話,子進程的子進程,有可能會變成孤兒進程。所以咱們可以設置可個選項,把整個該子進程的,整個進程組都幹掉。 設置為true的話,一般killasgroup也會被設置為true。需要註意的是,該選項發送的是stop信號,預設為false。。非必須設置。
killasgroup=true
改好後,記得supervisorctl update
切記不要使用 supervisorctl restart,restart是重啟所有項目服務,可能導致整個集群服務掛了
建議:使用systemd方式啟動