supervisorctl 启动客户端时候遇到问题笔记

问题

自己部署的服务器,时隔一些实践登入的时候,查看服务进程的情况的时候,经常性遇到一些问题。
使用:supervisorctl启动后就会报下面额错误:

unix:///tmp/supervisor.sock no such file
问题可能是因为:
在supervisor默认配置中,其启动的sock等都会放到tmp目录,而tmp目录会自动清理导致无法使用supervisorctl命令,此时:

所以建议修改supervisor.conf文件,
把所有关于有tmp修改到其他目录下,比如:/var/run/及/var/log/目录。
kill原来服务,然后重启supervisor服务,

这种情况下,再启动对应的服务端的话(即:supervisord是无法启动的)
对应的配置:

supervisorctl 启动客户端时候遇到问题笔记_第1张图片
image.png

这种情况下目前我处理方式是:只能先杀掉已经创建的进程,再重启相关进程;

问题临时解决:

PS简化方法:
(1):先结束所有的supervisord的进程:

 killall -9 supervisord

(2):再执行结束UWSGI的程序

 killall -9 uwsgi

(3): 再重启的对于的 supervisord

其他:

具体主要步骤是:
1:先结束supervisord的进程

[root@web1 ~]# ps -ef | grep supervisor
root     13305     1  0 17:18 ?        00:00:00 /usr/bin/python2 /usr/bin/supervisord
root     13475 13181  0 17:30 pts/0    00:00:00 grep --color=auto super

删掉进程13305 :

kill -9 13305 

PS:注意重启supervisord的时候需要加上相关的配置文件。避免直接的supervisord,不然可能会出现以下的情况:

/usr/lib/python2.7/site-packages/supervisor/options.py:296:UserWarning: Supervisord is running as root and it is searching for its configuration file in default locations (including its current working directory); you probably want to specify a “-c” argument specifying an absolute path to a configuration file for improved security.

重启的supervisord 建议加上需要启动的配置文件:

supervisord -c /etc/supervisord.conf 
--
supervisord -c /etc/supervisor/supervisord.conf
supervisorctl -c /etc/supervisor/supervisord.conf

2:再结束相关UWSGI进程服务(流程同上)

批量的关闭所有关于uwsgi的进程
[root@web1 ~]# killall -9 uwsgi  
[root@web1 ~]# ps -ef | grep uwsgi
root     30138 30118  0 22:19 pts/2    00:00:00 grep --color=auto uwsgi

批量删除进程的资料参考:

$ ps -ef | grep rtprecv | grep -v grep | awk '{print $2}' | xargs kill -91

解释一下: 
  ps -ef 用于获取当前系统所有进程,如上图所示。 
  grep rtprecv 过滤出与“rtprecv”字符相关的数据(以行为单位)。 
  grep -v grep 的作用是除去本次操作所造成的影响,-v 表示反向选择。 
  awk '{print $2}' 表示筛选出我们所关注的进程号,$2 表示每行第二个变量,在这个例子中就是进程号。所以如果你使用ps工具不一样,或者ps带的参数不一样,那需要关注的就可能不是$2,可能是$1 。 
  xargs kill -9 中的 xargs 命令表示用前面命令的输出结果(也就是一系列的进程号)作为 kill -9 命令的参数,-9 表示强制终止,不是必须的。

  上面是用 kill 配合过滤操作来完成,实际上还有更简单的方法——使用 killall 命令。killall 通过进程名字终止所有进程,用法如下:killall  。 
  在我们这个例子中,可以这么用:

# killall -9 rtprecv1

  当然,killall 也可以和 ps 或 pgrep 结合使用,以此来查看哪些程式正在运行。



【扩展知识】 
  与终止进程相关的命令有:


ps : 报告当前进程的快照
kill : 向一个进程发出信号
killall : 按名字消灭进程
pkill : 根据名字和其它属性查看或者发出进程信号
skill : 发送一个信号或者报告进程状态
xkill : 按照X资源消灭一个客户程序


终止一个进程或终止一个正在运行的程序,一般是通过 kill 、killall、pkill、xkill 等进行。比如一个程序已经死掉,但又不能退出,这时就应该考虑应用这些工具。 
  另外应用的场合就是在服务器管理中,在不涉及数据库服务器程序的父进程的停止运行,也可以用这些工具来终止。为什么数据库服务器的父进程不能用这些工具杀死呢?原因很简单,这些工具在强行终止数据库服务器时,会让数据库产生更多的文件碎片,当碎片达到一定程度的时候,数据库就有崩溃的危险。比如 mysql 服务器最好是按其正常的程序关闭,而不是用 pkill mysqld 或 killall mysqld 这样危险的动作;当然对于占用资源过多的数据库子进程,我们应该用 kill 来杀掉。 
  xkill 是在桌面用的杀死图形界面的程序。比如当 firefox 出现崩溃不能退出时,点鼠标就能杀死 firefox 。当xkill运行时出来和个人脑骨的图标,哪个图形程序崩溃一点就 OK 了。如果您想终止 xkill ,就按右键取消。 
   
  另外,说一下 grep 和 pgrep 的区别: 
  pgrep 是通过程序的名字来查询进程的工具,一般是用来判断程序是否正在运行。在服务器的配置和管理中,这个工具常被应用。用法:pgrep 参数选项 程序名。 
  grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。Unix 的 grep 家族包括 grep、egrep 和 fgrep。 
  简单来说,一个是查询程序的运行状态,一个是搜索内容。

---------------------
作者:阿基米东 
来源:CSDN 
原文:https://blog.csdn.net/lu_embedded/article/details/53590815?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!
其他参考
~~~
命令:ps -ef|grep keyword|grep -v grep|cut -c 9-15|xargs kill -9

批量杀死包含关键字“keyword”的进程。

"ps -ef" ——查看所有进程

"grep keyword" ——列出所有含有关键字"./amplxe-gui"的进程

"grep -v grep" ——在列出的进程中去除含有关键字"grep"的进程(因为我们在前一步生成的grep进程也包含关键字)

"cut -c 9-15" ——截取输入行的第9个字符到第15个字符,而这正好是进程号PID

"xargs kill -9" ——xargs 命令是用来把前面命令的输出结果(PID)作为"kill -9"命令的参数,并执行该命令。"kill -9"会强行杀掉指定进程。
~~~


3:再重启一下supervisor的服务端
~~~
[root@web1 ~]# supervisord 
~~~
4:再进入到客户端查看对应的服务又重新拉起了!

你可能感兴趣的:(supervisorctl 启动客户端时候遇到问题笔记)