记一次supervisor无法控制所管理进程的处理方法

今天由于代码变更,需要重启服务,服务进程使用supervisor管理,

  1. 执行指令:supervisorctl restart group-xxx: 一直没返回;
  2. 查看所重启服务组的进程:supervisorctl status group-xxx: 发现有一个处于 STOPPING状态,其他都是STOPED;
  3. 查询进程状态:ps -ef|grep xxx, 发现进程还活着;
  4. cat /proc/'进程pid' status, 发现进程状态是D,也就是等待磁盘资源(Disk),因为等待磁盘资源是处于内核态,所以supervisor发送的指令进程都无法响应,导致一直处于STOPPING状态;
  5. 查了一下,网上都说需要重启机器,不至于吧,想想等待磁盘的话,我把磁盘资源给他不就可以了吗,可是到底是在等待什么磁盘呢?
  6. 查看一下进程的服务日志,停留在了:begin delete GFS image: /data/image/testimg/,也就是服务要删除机器挂载的磁盘上面的图片,但是一直在这里等着,没有返回,此时基本可以断定是挂载的磁盘有问题;
  7. 查看磁盘状态,是正常挂载,而且也可以查看到图片。。。
  8. 在查看磁盘文件夹状态:ls -al,发现只有读权限,而代码要执行删除,没有权限,所以一直等待;
  9. 修改目录权限,赋予所有权限,进程成功停止。

通过此次事故,知道了一下两个重点知识:
1、服务处理内核态时,是无法响应父进程所发的SIGTERM/SIGINT等指令,但是supervisor作为父进程,已经发出了控制信号量,所以在supervisor中看到的是一直处于stopping状态;
2、如果进程需要磁盘资源,只需要解决资源问题就可以继续往下执行,而不至于重启机器;
3、服务日志一定要记录逻辑的进入和结束点,本次排查过程,日志也起到了关键作用。

Supervisor 无法停止及启动进程相关推荐

  1. workermen进程停止后启动报start in DAEMON mode

    项目在linux使用workermen运行脚本,改动代码时,需要停止之前运行的进程,将进程stop掉,然后就启动不了了. 进程停止后启动报 启动为DEBUGt调试模式.状态报在运行,有在运行的脚本了. ...

  2. java:使用supervisor优雅的管理SpringBoot进程

    目录 1.创建 SpringBoot 项目 2.手工部署项目 3.部署优化 4.通过 shell 脚本自动部署项目 4.1.在 Linux 安装 Git 4.2.在 Linux 安装 Maven 4. ...

  3. Supervisor安装、管理守护进程

    Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统 ...

  4. Supervisor 为服务创建守护进程

    今天需要再服务上部署一个.net 方面的项目:当时开启服务的命令只能在前台执行:使用nohub CMD &等放在后台开启服务都会宕机:所以搜寻了Supervisor 这个解决办法,为服务创建守 ...

  5. 一个批量停止和启动服务的工具

    写了一个工具,目的是批量停止和启动,服务以及进程:没做完:全部代码和可执行文件在此处:有人有兴趣可下载了接着实现:做好后发一份给我: http://pan.baidu.com/s/1i37qQUh 从 ...

  6. linux 后端的进程,linux后台启动进程

    1.tips进程与终端 父子进程 在linux系统里面,子进程由父进程fork而来,而所有的进程都是由init进程或其子进程fork而来,即init进程是所有进程的祖先. 父子进程的运行是相对独立的, ...

  7. Android如何配置init.rc中的开机启动进程(service)【转】

    本文转载自:http://blog.csdn.net/qq_28899635/article/details/56289063 开篇:为什么写这篇文章 先说下我自己的情况,我是个普通的大四学生,之前在 ...

  8. ubuntu下nginx停止、启动、重启

    转载自:https://www.cnblogs.com/xiaoL/p/6964217.html nginx -s reload  :修改配置后重新加载生效 nginx -s reopen  :重新打 ...

  9. Java执行cmd命令启动进程

    Java执行cmd命令启动进程 1.代码 //execute command through java applicationpublic static void exeCmd(){Runtime r ...

最新文章

  1. python 隐马尔科夫_隐马尔可夫模型原理和python实现
  2. 特定构造方法 如何让子类重写某些方法时提醒调用super
  3. 在同一台电脑上同时使用IE6和IE7
  4. php中...的用法
  5. 中业科技机器人价格_2019年年中盘点:智能扫地机器人十大畅销品牌排名
  6. zip直链生成网站_安装网站程序
  7. shell脚本--使用for循环逐行访问txt文件
  8. 高压断路器故障诊断的相关方法
  9. 《Android 第1行代码》读后感—第12章【最佳的UI体验——Material Design实战】
  10. session依赖cookie,如果浏览器禁用了cookie呢?
  11. 电赛旋转倒立摆 完整全功能 程序倒立摆 pid算法 程序使用时可根据需要自行调整参数
  12. C语言算法7744问题
  13. 最适合菜鸟的汉诺塔讲解
  14. 小龙教你轻轻松松配置好JAVA的JDK文件(环境变量,用JDK 7为例),大家都能学会的啦
  15. 如何使用Arduino和R305制作指纹考勤系统
  16. Excel表格进行10进制/16进制换算
  17. OpenAI的API key获取方法
  18. 171013 逆向-Reversing.kr(AutoHotKey2)
  19. java netty wss_netty实现websocket客户端(支持wss安全连接)
  20. 到场率高达96% 这才是高水准技术大会应该有的样子

热门文章

  1. CorelDraw插件开发-GMS插件-VBA-查找相同对象-cdr插件
  2. Android 自定义RatingBar设置步长没起作用
  3. Centos7 配置 Vmess
  4. jQuery实现一个农场小游戏
  5. 腾讯全面开放地图平台能力 赋能合作伙伴共建智慧服务生态
  6. mybatis-paginator分页工具的使用简述
  7. 基于opencv模板匹配的单目标跟踪
  8. 【Unicode】字符编码表信息
  9. 2018 物联网产业分布展望:基础设施将到位
  10. Android开发日记