Maison  >  Article  >  développement back-end  >  Vous faire comprendre l'outil de gestion de processus Python Supervisor

Vous faire comprendre l'outil de gestion de processus Python Supervisor

WBOY
WBOYavant
2022-07-28 15:34:462417parcourir

Cet article vous apporte des connaissances pertinentes sur Python. Supervisor est un système de gestion de processus développé en Python, qui permet aux utilisateurs de surveiller et de contrôler les processus sous Linux et peut transformer un processus de ligne de commande ordinaire en un processus démon d'arrière-plan, il peut automatiquement. redémarrez en sortant anormalement. Jetons-y un coup d'œil, j'espère que cela sera utile à tout le monde.

Vous faire comprendre l'outil de gestion de processus Python Supervisor

【Recommandation associée : Tutoriel vidéo Python3

1. Introduction

Supervisor est un système de gestion de processus développé en Python qui permet aux utilisateurs de surveiller et de contrôler les processus sous Linux. Il peut convertir une commande courante. Le processus en cours d'exécution devient un processus démon en arrière-plan, qui peut redémarrer automatiquement en cas de fermeture anormale

2. Installer

Supervisor prend en charge Linux et Mac, mais ne prend pas en charge Windows
Le système de cet article est : centos, superviseur==4.2.4<code>centos,supervisor==4.2.4

pip3 install supervisor

安装完成后,在Python bin目录下面会有这样几个文件。

ls /usr/local/Python38/bin

echo_supervisord_conf
supervisorctl
supervisord

注:由于python bin目录是加入了环境变量,所以可以直接执行这几个文件。

三、创建配置文件

1.首先建个目录,存放配置文件:mkdir supervisord

echo_supervisord_conf > supervisord/supervisord.conf

若报错 -bash: /etc/supervisord.conf: Permission denied,需要切换到 root用户。

2.创建子进程配置文件路径

mkdir -p supervisor/conf.d

后面我们的任务,我们想把它作为守护进程,都需要一个配置文件,我们把这些配置文件放在conf.d目录下面。

3.修改配置文件

vim supervisord/supervisord.conf

将最后一部分改为

[inclue]
# 因为我这里是放在root用户目录下,也可以放其它目录
files=/root/supervisord/conf.d/*.conf

四、初试

1.启动 supervisord

supervisord -c supervisord/supervisord.conf

这样就把supervisord启动了,我们接下来可以把我们的任务交给他去守护了,停止了会帮我们自动重启。

查看版本

supervisord -v

2.编写简单的 Shell 脚本

vim supervisord/test.sh

内容如下

#!/bin/bash
while : 
do
    echo `date &#39;+%Y-%m-%d %H:%m:%S&#39;`
    sleep 1
done

简单运行,Ctrl + C 退出

3.创建子进程配置文件

vim supervisor/conf.d/test.conf

test.conf内容如下:

[program:test]
command=sh /root/supervisord/test.sh
priority=999                              ; 相对启动优先级,数值越小越优先,默认为999
autostart=true                            ; 在supervisor启动时自动启动,默认为true
autorestart=true                          ; 在意外退出时重新启动,默认为true
startsecs=10                              ; 子进程启动多少秒后状态为running则认为启动成功,默认为1
startretries=3                            ; 尝试启动的最大次数,默认为3
exitcodes=0,2                             ; 进程的预期退出代码列表,默认为0
stopsignal=QUIT                           ; 终止进程的信号,默认为TERM
stopwaitsecs=10                           ; 在SIGKILL之前等待的最大秒数,默认为10
user=root                                 ; 在某用户下设置uid来启动程序,默认不切换用户
redirect_stderr=true                      ; 是否重定向stdout和stderr,默认为false
stdout_logfile=/tmp/supervisor.stdout.log  ; stdout的输出文件,默认为AUTO
stdout_logfile_maxbytes=50MB              ; stdout最大文件大小,默认为50MB
stdout_logfile_backups=10                 ; stdout文件备份数,设为0则不备份,默认为10

其实只需要配置3个参数,其它不用管:

  • command=sh /root/supervisord/test.sh: 我们的子进程启动命令;
  • stdout_logfile=/tmp/supervisor.stdout.log: 日志;
  • program:test:进程名为test,如果进程哪一天想停止启动等,需要进程名;

目前文件目录结构是这样的:

yum install tree
tree supervisord

supervisord
├── conf.d
│   └── test.conf
├── supervisord.conf
└── test.sh

4.重新读取配置并更新子进程

因为我们的supervisord已经启动了,可以通过ps -ef | grep supervisord.conf查看。添加了子进程配置文件,需要把它重新加载进来:

先进入supervisord目录: cd supervisord,否则执行下面命令会有问题。

supervisorctl reread

再次查看进程状态

supervisorctl status

结果:

test     RUNNING   pid 30278, uptime 1:29:41

名为test的这个进程已经作为守护进程在后台运行,我们来kill掉他:

kill 30278

再执行supervisorctl status,会发现状态立马由starting,不一会变成running,那么supervisord

vim supervisord.conf

Une fois l'installation terminée, il y aura plusieurs fichiers comme celui-ci dans le bin répertoire de Python.

[inet_http_server]
port=*:9001                ; 此处改为*便于调试

Remarque : Étant donné que le répertoire python bin contient des variables d'environnement ajoutées, ces fichiers peuvent être exécutés directement.

3. Créez le fichier de configuration

1. Créez d'abord un répertoire pour stocker le fichier de configuration : mkdir Supervisord.

supervisorctl reload

Si une erreur est signalée -bash : /etc/supervisord.conf : Autorisation refusée, vous devez passer à l'utilisateur root.

2. Créer le chemin du fichier de configuration du processus enfant

supervisorctl reread

Notre prochaine tâche, nous voulons l'utiliser comme processus démon, nécessite un fichier de configuration. Nous plaçons ces fichiers de configuration dans le répertoire conf.d.

3. Modifiez le fichier de configuration

supervisorctl update

Changez la dernière partie en

supervisorctl reload

4. Test initial

1. Démarrez Supervisord

supervisorctl status

Cela démarrera supervisord, nous pouvons ensuite nous. laissez-lui nos tâches à protéger, et s'il est arrêté, il redémarrera automatiquement pour nous.

Afficher la version

supervisorctl status <name>

2. Écrivez un script Shell simple

supervisorctl start all

Le contenu est le suivant

supervisorctl start <name>

Exécution simple, Ctrl + C pour quitter

3.

supervisorctl restart all

test.conf contient le contenu suivant :

supervisorctl restart <name>

En fait, vous n'avez besoin de configurer que 3 paramètres, et vous n'avez pas à vous soucier des autres :

  • command=sh /root/supervisord/test.sh : Notre commande de démarrage de sous-processus ;
  • stdout_logfile=/tmp/supervisor.stdout.log : Journal ;
  • program:test : Le nom du processus est <code>test. Si le processus souhaite s'arrêter et démarrer n'importe quel jour, le nom du processus est test. est requis ;
La structure actuelle des répertoires de fichiers est la suivante :

supervisorctl stop all
4 . Relisez la configuration et mettez à jour le processus enfant

Parce que notre supervisord a été démarré, vous pouvez le visualiser via ps -ef | grep superviseurd.conf. Le fichier de configuration du sous-processus a été ajouté et doit être rechargé : 🎜🎜Entrez d'abord dans le répertoire supervisord : cd superviseur, sinon il y aura des problèmes lors de l'exécution de la commande suivante . 🎜
supervisorctl stop <name>
🎜Vérifiez à nouveau l'état du processus🎜
supervisorctl add <name>
🎜Résultat : 🎜
🎜test RUNNING pid 30278, temps de disponibilité 1:29:41🎜
🎜Le processus nommé test a été utilisé comme un démon Le processus s'exécute en arrière-plan, tuons-le : 🎜
supervisorctl reomve <name>
🎜Exécutez à nouveau supervisorctl status, et vous constaterez que le statut passe immédiatement de starting à running, alors le rôle de <code>supervisord est déjà évident, il peut automatiquement nous aider à surveiller automatiquement les tâches. 🎜🎜Remarque : Pour les commandes liées à l'ajout, à la suppression, au démarrage et à l'arrêt des processus enfants, consultez l'annexe. 🎜🎜🎜5. Interface Web 🎜🎜🎜L'interface Web n'est pas très utile, c'est-à-dire que si vous souhaitez démarrer ou mettre en pause un processus, vous n'avez pas besoin de taper des commandes. 🎜rrreee🎜Décommenter🎜rrreee🎜Redémarrer superviseur🎜rrreee🎜Accès au navigateur : linux_ip:9001.🎜🎜Annexe : commandes communes superviseurctl🎜🎜Ajouter un fichier de configuration, recharger🎜rrreee🎜Modifier un fichier de configuration, recharger🎜rrreee 🎜Redémarrer le superviseur🎜rrreee 🎜Afficher l'état de tous les processus🎜rrreee🎜Afficher l'état du processus spécifié🎜rrreee🎜Démarrer tous les processus enfants🎜rrreee🎜Démarrer le processus enfant spécifié🎜rrreee🎜Redémarrer tous les processus enfants🎜rrreee🎜Redémarrer le processus enfant spécifié🎜rrreee🎜 Arrêtez tous les processus enfants🎜rrreee🎜Arrêtez le processus enfant spécifié🎜rrreee🎜Ajoutez le processus enfant au groupe de processus🎜rrreee🎜Supprimez le processus enfant du groupe de processus, vous devez d'abord l'arrêter. Remarque : Après la suppression, vous devez utiliser la relecture et la mise à jour pour réexécuter le processus🎜rrreee🎜[Recommandations associées : 🎜Tutoriel vidéo Python3🎜]🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer