Neo君作为一只小白,今天踩到了一个supervisor的坑。

如上图所示,出现这种情况后,想把这个进程停止、或者重启,甚至stop all它还是这个样子,如下图(马赛克部分为进程名称):

一:背景

在服务器上部署几个单独跑的程序,使用supervisor进行管理。关于supervisor的安装、配置运行等,Neo君不再赘述,百度能到一大堆。这里只介绍几个我用到的觉得有用的命令。

#启动supervisor, supervisord.conf为配置文件
supervisord -c xxx/supervisord.conf #supervisord.conf 部分配置
[program:program-name]
command = /root/program-name.sh ;启动程序的脚本(位置自定义)
numprocs = ;number of processes copies to start
autostart = true ;在 supervisord 启动的时候也自动启动
autorestart = true ;程序异常退出后自动重启
startretries = ;启动失败自动重试次数,默认是
startsecs = ;启动 秒后没有异常退出,就当作已经正常启动了
stopsignal = KILL ;干掉进程的信号,默认为TERM
redirect_stderr=true ;把 stderr 重定向到 stdout,默认 false
exitcodes = , ;进程退出码,autorestart=unexpected时有用
stdout_logfile=/program-name/logs/program-name.log ;日志输出目录(可自定义) #supervisorctl 是supervisord的客户端,可以管理进程,常用命令
status # 查看程序状态
start program-name # 启动程序
stop program-name # 关闭 程序
restart program-name # 重启程序
reread # 读取有更新(增加)的配置文件,不会启动新添加的程序
update # 重启配置文件修改过的程序

二:问题:程序PID为0

替换新版本的程序的时候,再重新启动某个程序,发现出现了一开始的问题。

三:解决

可以参见github上的问题https://github.com/Supervisor/supervisor/issues/445

经过查询Neo君发现,这个问题好像是由于,文件权限引起的。Neo君在配置的时候配置了一个日志输出目录:

stdout_logfile=/program-name/logs/program-name.log ;日志输出目录(可自定义)

但是,项目新部署的时候,没有logs目录,即/program-name/  下没有logs文件夹,然后启动的时候报了个错

supervisor>
supervisor> start program-name
error: <class 'xmlrpclib.ProtocolError'>, <ProtocolError for 127.0.0.1/RPC2: Internal Server Error>: file: /usr/lib/python2./site-packages/supervisor-3.1.-py2..egg/supervisor/xmlrpc.py line:

再查看程序就变成了pid=0。但是,没有什么停止的方法,Neo君就杀了进程(如果有什么好的停止方法请告知)。

建立文件夹,在启动脚本里加入了建立logs目录的代码。可以参考

if [ ! -e "$base_home/logs" ] ; then
mkdir "$base_home/logs"
fi

 

四:总结

supervisor 使用出现程序PID为0 的时候,应该是文件权限的问题。

1.启动时注意报错内容,看看是哪个文件

2.查看文件夹是否存在,或是否有权限


最新文章

  1. Apworks框架实战(三):单元测试与持续集成
  2. C++ MFC打开文件的流程
  3. centos 无线网卡安装,网卡rtl8188ee
  4. 导出带图形的数据excel表
  5. repo 无法连接gerrit.googlesource.com 下载工具
  6. freeCodeCamp:Search and Replace
  7. eclipse无法与手机连上的解决方案
  8. web服务器分析与设计(三)
  9. T-SQL实例 函数结果设置为列别名
  10. Android APK反编译具体解释(附图)
  11. javascript时间函数
  12. Flash键盘钢琴谱
  13. ubuntu 把终端信息输出到文本文件中的方法
  14. IOS应用的国际化
  15. 稀疏贴图 SparseTexture
  16. Oracle_lhr_CentOS 7.3 ECS上搭建RAC 18c+单实例DG+EMCC+DG的FSFO快速故障转移配置
  17. Java多线程——Condition条件
  18. SQL查数据库有哪些触发器,存储过程...
  19. generator详解
  20. Java 算法 概念汇总

热门文章

  1. 戴尔 R730 服务器装 server 2016。
  2. Zookeeper监控平台
  3. Thrift使用入门---RPC服务
  4. evpp http response_http_code_
  5. Python离线断网情况下安装numpy、pandas和matplotlib等常用第三方包
  6. 优雅的处理vue注册全局组件
  7. vueRouter history模式下 nginx配置
  8. CSS定位有几种?分别描述其不同
  9. 物联网之窄带物联网(NB-IOT)
  10. struts2--入