Supervisor的簡介
Supervisor是一個客戶端/服務器系統,允許其用戶控制類似UNIX的操作系統上的許多進程。它可以很方便的監聽、啟動、停止、重啟一個或多個進程。用Supervisor管理的進程,當一個進程意外被殺死,supervisort監聽到進程死后,會自動將它重新拉起,很方便的做到進程自動恢復的功能,不再需要自己寫shell腳本來控制
Supervisor的安裝
1)安裝supervisor
pip install supervisor --user
2) 創建配置文件supervisord.conf (建議在root用戶下進行,如果之前有機器再用,你可以偷個懶,直接把supervisord.conf文件考過來就可以)
echo_supervisord_conf > supervisord.conf
心得:我在部署這一步的時候很奇怪,在root用戶下無論怎樣執行 pip install supervisor --user這一步,都說 supervisor不存在,具體報錯忘記截圖了然后我就去了admin用戶下,果然,在admin用戶下執行就沒問題,默認生成的supervisord.conf在admin的家目錄下。但是為了不會出現權限問題,我們還是在root用戶下就行吧。
3)關於/etc/supervisord.conf 的配置
圖中紅線框起來的位置你需要提前創建否則會報各種錯誤
關於這個報錯我參考了這篇文章:https://blog.csdn.net/kkevinyang/article/details/80539940
4)然后執行supervisord -c /etc/supervisord.conf ,如果出現報錯-bash: supervisord: command not found並且你應經執行過 pip install supervisor --user,你那么你需要自己找一下這個命令的路勁,他可能在admin用戶的路徑之下,所以執行
[root@test-hadoop01 ~]# which supervisord /usr/bin/which: no supervisord in (/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/cronolog/sbin:/usr/local/java/bin:/root/bin) [root@test-hadoop01 ~]# cd / [root@test-hadoop01 /]# find -name [root@test-hadoop01 ~]# which supervisord find: paths must precede expression: ~]# Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression] [root@test-hadoop01 /]# find -name supervisord ./root/.local/share/Trash/files/cloudera-manage/cm-5.16.1/lib64/cmf/agent/build/env/bin/supervisord ./root/.local/bin/supervisord ./opt/cloudera-manager/cm-5.16.1/lib64/cmf/agent/build/env/bin/supervisord find: ‘./proc/13398’: No such file or directory ./home/admin/.local/bin/supervisord
這里就可以發現supervisord命令藏在/home/admin/.local/bin/這個目錄之下,所以執行的時候加上全路徑就可以
/home/admin/.local/bin/supervisord -c /etc/supervisord.conf 其實這里還有坑你的python可能版本不對我在直接執行的時候會出現用python2執行的情況‘,我看了一下原來的機器,用的是python執行的,所以我又在執行命令中加了python的全目錄’
/usr/bin/python /home/admin/.local/bin/supervisord -c /etc/supervisord.conf
執行完以上命令以后我們可以查看一下是否啟動成功
[root@test-hadoop01 /]# ps -ef |grep supervisord root 5237 1 0 Oct30 ? 00:03:42 /usr/bin/python /home/admin/.local/bin/supervisord -c /etc/supervisord.conf #此處可以看出命令已經啟動成功 root 15985 11736 0 11:04 pts/2 00:00:00 grep --color=auto supervisord root 29331 1 0 Oct25 ? 00:04:46 /opt/cloudera-manager/cm-5.16.1/lib64/cmf/agent/build/env/bin/python /opt/cloudera-manager/cm-5.16.1/lib64/cmf/agent/build/env/bin/supervisord [root@test-hadoop01 /]#
關於這個報錯我參考了這篇文章:https://blog.csdn.net/kkevinyang/article/details/80539940
error: <class 'socket.error'>, [Errno 2] No such file or directory: file: <string> line: 1 Error: .ini file does not include supervisorctl section Exited too quickly (process log may have details) CRIT Server 'unix_http_server' running without any HTTP authentication checking
Unlinking stale socket /var/run/supervisor/supervisor.sock
解決方案:執行以下命令
unlink /var/run/supervisor/supervisor.sock
這四個解決方式都是在我上文中有體現的,按照我說的做都是可以避免的。
最后給大家推薦一篇關於supervisor的博客 他寫的非常詳細,如果我的博客沒能解決您的困惑您可以去他那看一下
https://www.cnblogs.com/ruanraun/p/supervisor.html