[LINUX] Premiers pas avec Supervisor

Qu'est-ce que le superviseur

Un système capable de contrôler et de gérer les processus.

Plus précisément, il transforme le processus en démon et le redémarre en cas de plantage.

Par exemple, le projet que j'attribue utilise le gestionnaire de file d'attente de Laravel, ce qui est utile pour l'exécution parallèle continue des programmes.

Malheureusement pour les utilisateurs de Windows, il ne démarre pas sous Windows car il est de type UNIX.

Documentation officielle http://supervisord.org/running.html#adding-a-program

À propos de cet article

J'écrirai le contenu minimum nécessaire sur l'utilisation de base de Supervisor.

Installation

Cette fois, nous allons l'exercer sur l'instance EC2 lancée de manière appropriée sur AWS.

Accès au serveur ~ Changement de super utilisateur

...$ ssh -i ~/.ssh/udemy_sample2.pem [email protected]
[ec2-user@ip-172-31-37-208 ~]$ sudo su -

Installer le superviseur Je ne l'ai pas étudié en détail, mais il semble que ʻeasy_install` soit bon.

[root@ip-172-31-37-208 ~]# sudo easy_install supervisor
Searching for supervisor
Reading https://pypi.python.org/simple/supervisor/
Downloading https://files.pythonhosted.org/packages/ca/1f/07713b0e1e34c312450878801d496bce8b9eff5ea9e70d41ff4e299b2df5/supervisor-4.1.0-py2.py3-none-any.whl#sha256=a76b2f77a560f2dc411c0254a4eb15f555e99faac48621b0f1fc9ab013944f47
Best match: supervisor 4.1.0
Processing supervisor-4.1.0-py2.py3-none-any.whl
Installing supervisor-4.1.0-py2.py3-none-any.whl to /usr/lib/python2.7/site-packages
writing requirements to /usr/lib/python2.7/site-packages/supervisor-4.1.0-py2.7.egg/EGG-INFO/requires.txt
Adding supervisor 4.1.0 to easy-install.pth file
Installing echo_supervisord_conf script to /usr/bin
Installing pidproxy script to /usr/bin
Installing supervisorctl script to /usr/bin
Installing supervisord script to /usr/bin

Installed /usr/lib/python2.7/site-packages/supervisor-4.1.0-py2.7.egg
Processing dependencies for supervisor
Finished processing dependencies for supervisor

Créer un fichier de configuration

[root@ip-172-31-37-208 ~]# echo_supervisord_conf > /etc/supervisord.conf

Le fichier de configuration est placé sous etc.

Ajout d'un programme à démoniser (lorsqu'il n'est pas géré individuellement)

Si vous ne gérez pas les fichiers de configuration individuellement, ajoutez le programme que vous souhaitez démoniser à supervisord.conf comme suit.

supervisord.conf


[program:foo]
command=/bin/cat

Ajout de programme à transformer en démon (lors de la gestion individuelle)

Si vous souhaitez gérer les fichiers de configuration individuellement, suivez la procédure ci-dessous.

Création d'un répertoire pour stocker les fichiers de configuration de programme individuels

[root@ip-172-31-37-208 ~]# mkdir /etc/supervisord.d

Modifier supervisord.conf

Changements (avant changement)

supervisord.conf


;[include]
;files = relative/directory/*.ini

Pièce modifiée (après modification)

supervisord.conf


[include]
files = /etc/supervisord.d/*.conf

Cela chargera également les fichiers de configuration individuels créés sous /etc/supervisord.d.

Création de fichiers de configuration de programme individuels

[root@ip-172-31-37-208 ~]# vi /etc/supervisord.d/foo.conf

Créé comme suit

foo.conf


[program:foo]
command=/bin/cat

À propos de la commande à utiliser

supervisord

Utilisé pour démarrer le superviseur.

Il n'est pas utilisé pour les opérations détaillées du programme.

supervisorctl

Il est utilisé dans le fonctionnement du programme exécuté. Voir l'URL ci-dessous pour les méthodes de fonctionnement détaillées.

Lancer le superviseur ~ Exécuter le programme

Démarrer le superviseur.

[root@ip-172-31-37-208 ~]# /usr/bin/supervisord -c /etc/supervisord.conf

Il commencera simplement par / usr / bin / supervisord, mais dans ce cas, il semble préférable d'utiliser l'option c et de spécifier le chemin absolu du fichier de configuration car il va chercher l'emplacement du fichier de configuration dans l'ordre. ..

Vérifiez le programme dans le fichier de configuration.

[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl status
foo                              RUNNING   pid 29747, uptime 0:02:30

Il semble que le programme décrit dans le fichier de configuration s'exécute automatiquement au démarrage de Supervisor.

Essayez de tuer.

[root@ip-172-31-37-208 etc]# kill -9 29747
[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl status
foo                              RUNNING   pid 29761, uptime 0:00:03

Confirmez que l'ID de processus a changé et qu'il a été redémarré.

Essayez d'arrêter le processus.

[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl stop foo
foo: stopped
[root@ip-172-31-37-208 ~]# /usr/bin/supervisorctl status
foo                              STOPPED   Mar 29 01:17 AM

Assurez-vous que le processus est arrêté.

Essayez de supprimer le processus.

[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl remove foo
foo: removed process group
[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl status
[root@ip-172-31-37-208 etc]#

Assurez-vous que le processus est mort.

Ajoutez un nouveau programme et essayez de l'exécuter au premier plan.

Ajoutez ce qui suit à supervisord.conf

supervisord.conf


[program:foo2]
command=watch -n 1 `date`

Lisez le fichier de configuration et démarrez le processus

[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl reread
foo: available
foo2: available
[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl add foo2
foo2: added process group
[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl status
foo2                             RUNNING   pid 1177, uptime 0:00:04
[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl fg foo2
Every 1.0s: `date`                                      Sun Mar 29 04:24:25 2020

sh: Sun: command not found

Exécution confirmée au premier plan.

Vous pouvez quitter avec Ctl + C. (Bien sûr, le processus reste démonisé)

Liste des commandes

J'ai extrait ceux que je pense utiliser souvent.

status

Vérifiez l'état de l'état du processus.

reread

Lisez le fichier de configuration.

Aucun programme n'est ajouté ou supprimé à ce stade.

add <name>

Appliquez le programme décrit dans le fichier de configuration (processus de démarrage).

remove <name>

Supprimer un processus arrêté.

restart <name>

Redémarrez le processus.

Notez que cela seul ne lira pas le contenu du fichier de configuration.

stop

Arrêtez le processus.

start

Démarrez le processus.

update

Rechargez le fichier de configuration et redémarrez le programme.

Seul le programme dont les paramètres ont été modifiés est-il redémarré?

reload

Redémarrez le démon Supervisor.

Résumé

Pratique! !! !! !! !!

Recommended Posts

Premiers pas avec Supervisor
Introduction à MQTT (Introduction)
Introduction à Scrapy (1)
Introduction à Scrapy (3)
Introduction à Tkinter 1: Introduction
Introduction à PyQt
Introduction à Scrapy (2)
[Linux] Introduction à Linux
Introduction à Scrapy (4)
Introduction à discord.py (2)
Introduction à Lightning Pytorch
Premiers pas avec le Web Scraping
Introduction aux baies non paramétriques
Introduction à EV3 / MicroPython
Introduction au langage Python
Introduction à la reconnaissance d'image TensorFlow
Introduction à OpenCV (python) - (2)
Introduction à PyQt4 Partie 1
Introduction à l'injection de dépendances
Introduction à Private Chainer
Introduction à l'apprentissage automatique
Introduction à l'algorithme de recherche de dictionnaire
Introduction à la méthode Monte Carlo
[Mémorandum d'apprentissage] Introduction à vim
Introduction à PyTorch (1) Différenciation automatique
opencv-python Introduction au traitement d'image
Introduction à Python Django (2) Win
Introduction à l'écriture de Cython [Notes]
Introduction à Private TensorFlow
Une introduction à l'apprentissage automatique
[Introduction à cx_Oracle] Présentation de cx_Oracle
Une super introduction à Linux
introduction
AOJ Introduction à la programmation Sujet n ° 7, Sujet n ° 8
Introduction à la détection des anomalies 1 principes de base
Introduction à RDB avec sqlalchemy Ⅰ
[Introduction au système] Retracement de Fibonacci ♬
Introduction à l'optimisation non linéaire (I)
Introduction à la communication série [Python]
AOJ Introduction à la programmation Sujet n ° 5, Sujet n ° 6
Introduction au Deep Learning ~ Règles d'apprentissage ~
[Introduction à Python] <liste> [modifier le 22/02/2020]
Introduction à Python (version Python APG4b)
Une introduction à la programmation Python
[Introduction à cx_Oracle] (8e) version de cx_Oracle 8.0
Introduction à discord.py (3) Utilisation de la voix
Introduction à l'optimisation bayésienne
Apprentissage par renforcement profond 1 Introduction au renforcement de l'apprentissage
Super introduction à l'apprentissage automatique
Introduction à Ansible Part «Inventaire»
Série: Introduction à cx_Oracle Contents
[Introduction] Comment utiliser open3d
Introduction à Python pour, pendant
Introduction au Deep Learning ~ Rétropropagation ~
Introduction à Ansible Part ④'Variable '
Introduction à la commande vi (Remarque)