进程管理工具 supervisor 简介及使用技巧 · TesterHome

您所在的位置:网站首页 网易云音乐怎么下载电脑版歌曲 进程管理工具 supervisor 简介及使用技巧 · TesterHome

进程管理工具 supervisor 简介及使用技巧 · TesterHome

2024-07-18 06:22:51| 来源: 网络整理| 查看: 265

前言

很久很久以前写的一篇文章,发现依然很有用。在 testerhome 转发下

背景

经常碰到要跑一些守护进程。平常我的做法是开一个 tmux 软件或者 screen,然后启动软件。如果有其他人问,我则会建议用

nohup your-program &>nohup.log &

这种方式。

可是这种做法毕竟不是长久之计,机器重启或者不小心 kill 了某个进程,后台运行的这个进程可能就不小心死掉了。 后来开源界的大牛建议我用 supervisor。尝试之后,简直是如获至宝。作为一个存在了长达 10 年多的进程管理软件,他已经相当成熟。到如今我用这个软件已经超过 1 年了,希望借这篇文章给大家普及下这个超赞的软件。

Supervisor 是一个客户端服务器系统,包含有两个程序

Supervisor 的 server 部分称为 supervisord。主要负责管理子进程,响应客户端的命令,log 子进程的输出,创建和处理不同的事件 Supervisor 的命令行客户端 supervisorctl。它可以与不同的 supervisord 进程进行通信,获取子进程信息,管理子进程

supervisor 的官网地址是 http://supervisord.org/ 我的大部分资料也是来自这里。

优点

相比较传统的方式,supervisor 用很多好处

简单

通常管理 linux 进程的时候,一般来说都需要自己编写一个能够实现进程 start/stop/restart/reload 功能的脚本,然后丢到/etc/init.d/下面。这么做有很多不好的地方,第一我们要编写这个脚本,这就很耗时耗力了。第二,当这个进程挂掉的时候,linux 不会自动重启它的,想要自动重启的话,我们还要自己写一个监控重启脚本。而,supervisor 则可以完美的解决这些问题。

进程组

supervisor 可以对进程组统一管理,也就是说咱们可以把需要管理的进程写到一个组里面,然后我们把这个组作为一个对象进行管理,如启动,停止,重启等等操作。而 linux 系统则是没有这种功能的,我们想要停止一个进程,只能一个一个的去停止,要么就自己写个脚本去批量停止。

有效性

当 supervisor 的子进程挂掉的时候,操作系统会直接给 supervisor 发信号。而其他的一些类似 supervisor 的工具,则是通过进程的 pid 文件,来发送信号的,然后定期轮询来重启失败的进程。显然 supervisor 更加高效。

安装

先从安装说起。

官网建议 debain 或者 ubuntu 使用 apt-get 安装。 请注意,千万不要这么干 软件源的版本是 3.0a8,这个版本有个坑爹的 bug,stopasgroup 这个设置没有用。

正确的安装方法, 安装完后版本应该 >= 3.1

sudo pip install -U supervisor sudo echo_supervisord_conf > /etc/supervisord.conf

这个配置文件大部分都不用改,有个地方最好还是改下

[include] files = supervisor-conf.d/*.ini

然后mkdir /etc/supervisor-conf.d, 各个程序的配置都放到这个目录下。这样安排比较合理一些。

弄完后,启动服务端supervisord -c /etc/supervisord.conf。 接着运行sudo supervisorctl status ,如果没有报错,就说明服务端启动正常了。

添加程序

首先需要准备一个配置文件(如 hellod.ini)。放到 /etc/supervisor-conf.d/目录下。分号; 后面的是注释

文件的内容要遵循 ini 配置文件的规范。下面是个例子,这个例子基本上是通用的,需要改的部分只要上面 4 行

[program:hello] directory=/home/codeskyblue/hello command=python hello.py user=codeskyblue autostart=true autorestart=true redirect_stderr=true stopsignal=TERM stopasgroup=true

user 代表运行的账户,program:hello, 其中 hello 是这个 supervisor 中的名字,方便控制。 其中 stopasgroup 代表的意思是 如果停止,将其相关的子进程也一起杀掉。

其实不妨写个 shell 脚本来生成配置文件,更快一些。贴上我写的一个生成配置的脚本。

#!/bin/sh # gensvconf.sh NAME=$(basename $PWD) COMMAND=$@ USER=$(whoami) cat > supervisor.ini sys.stdout, 'hello: %d' % n sys.stdout.flush() n += 1 time.sleep(1.0)

把生成的配置文件,拷贝过去,更新下 supervisor 的配置就好了。

cp supervisor.ini /etc/supervisor-conf.d/hello.ini supervisorctl update supervisorctl status # 查看hello是否正常运行

正常情况下应该会显示

hello RUNNING pid 30096, uptime 0:02:30

还有一些其他的常用命令(这里我默认你用 root,所以我省去了 sudo)

supervisorctl tail hello 可以查看进程的输出 supervisorctl reread hello 重新加载 hello 的配置 supervisorctl remove hello 只有在 hello 停止运行的时候,才可以。这句是将 hello 从进程守护列表中移除

还有一个技巧,修改一个配置文件/etc/supervisor.conf的一个地方

[unix_http_server] file=/var/run//supervisor.sock chmod=0777 ; 原来是chmod=0700

改完之后,sudo supervisorctl reload 重新加载下配置。 这时在非 root 用户下,也可以自由的使用 supervisorctl 了

HTTP 服务

加入如下两行到/etc/supervisord.conf中

[inet_http_server] port = :9001

supervisorctl reload 重新加载配置。打开浏览器输入 http://localhost:9001, 应该就会看到这个页面了,网页上的功能也很全。

supervisor-http

感谢

感谢爸爸,感谢妈妈。感谢开源社区,感谢我的水杯,感谢我那便宜但又好用的键盘。

部分参考了: http://lixcto.blog.51cto.com/4834175/1539136



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


    图片新闻

    实验室药品柜的特性有哪些
    实验室药品柜是实验室家具的重要组成部分之一,主要
    小学科学实验中有哪些教学
    计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
    实验室各种仪器原理动图讲
    1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
    高中化学常见仪器及实验装
    1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
    微生物操作主要设备和器具
    今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
    浅谈通风柜使用基本常识
     众所周知,通风柜功能中最主要的就是排气功能。在

    专题文章

      CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭