Outils pour utilisateurs

Outils du site


linux:supervisor (lu 1155 fois)

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
linux:supervisor [14-10-2014 11:29]
edmc73
linux:supervisor [16-12-2019 16:26] (Version actuelle)
edmc73 [Supervisor]
Ligne 7: Ligne 7:
 Avant de détailler plus en détail, lisez ce lien => https://serversforhackers.com/editions/2014/08/12/process-monitoring/ Avant de détailler plus en détail, lisez ce lien => https://serversforhackers.com/editions/2014/08/12/process-monitoring/
  
 +===== Config =====
 +
 +Les fichiers de config doivent être écrit dans **/etc/supervisor/conf.d**. Voici un exemple basic
 +
 +<code>
 +[program:my_app]
 +command=/path/to/my/script
 +autostart=true
 +autorestart=true
 +user=toto
 +stdout_logfile=/var/log/supervisor/apicarine_worker.log
 +stderr_logfile=/var/log/supervisor/apicarine_error.log
 +</code>
 +
 +Si vous souhaitez lancer plusieurs instances, vous devez spécifier le nom des process avec obligatoirement la variable %(process_num)s
 +<code>
 +[program:my_app]
 +command=/path/to/my/script
 +process_name=worker_%(process_num)02d
 +numprocs=4
 +autostart=true
 +autorestart=true
 +user=toto
 +stdout_logfile=/var/log/supervisor/apicarine_worker.log
 +stderr_logfile=/var/log/supervisor/apicarine_error.log
 +</code>
 +
 +Si vous souhaitez que supervisor se place dans un répertoire avant de lancer la commande, ajoutez
 +  directory=/tmp
 +===== Commandes =====
 +
 +Pour se mettre dans le shell de supervisor
 +  supervisorctl
 +
 +<code>
 +supervisor> help
 +
 +default commands (type help <topic>):
 +=====================================
 +add    clear  fg        open  quit    remove  restart   start   stop  update 
 +avail  exit   maintail  pid   reload  reread  shutdown  status  tail  version
 +</code>
 +
 +Pour lire les fichiers de config
 +  > reread
 +Pour appliquer les fichiers de config
 +  > update
 +
 +Lister les process dispo
 +  > avail
 +Pour désactiver un process
 +  > remove nom_du_process
 +Activer un process
 +  > add
 +
 +Voir ce qui se passe dans un process
 +  > fg nom_du_process
 +
 +===== Notification par mail =====
 +
 +En cas de crash on aimerait bien recevoir un mail, pour cela il faut utiliser un script python
 +
 +https://github.com/Supervisor/superlance/blob/master/docs/index.rst
 +
 +  apt install python-pip
 +  pip install superlance
 +    ou
 +  easy_install superlance
 +
 +si il manque des dépendances python, installez-les
 +
 +Ensuite, créer une config pour supervisor ( https://github.com/Supervisor/superlance/blob/master/docs/crashmail.rst )
 +<code>
 +[eventlistener:crashmail]
 +command=crashmail -p program1 -p group1:program2 -m dev@example.com
 +events=PROCESS_STATE_EXITED
 +</code>
 +
 +puis 
 +  supervisorctl reread
 +  supervisorctl update
 +
 +On peut aussi spécifier le mail de l'expéditeur, mettre l'option -a pour recevoir un mail peut importe le programme qui crash et mettre l'event PROCESS_STATE pour recevoir un mail sur chaque changement d'état.
 +<code>
 +[eventlistener:crashmail]
 +command=crashmail -a -m dev@example.com -s '/usr/sbin/sendmail -t -i -F Supervisor -f supervisor@example.com'
 +events=PROCESS_STATE
 +</code>
 +
 +
 +Plus d'info sur les events => http://supervisord.org/events.html
 +
 +===== Les logs =====
 +
 +Supervisord rotate lui même ses logs (si > 50Mo, rotate sur 10 fichiers par défaut) mais si vous voulez utiliser logrotate, il est important de mettre l'option **copytruncate** dans votre fichier de config sinon les logs continuent à s'écrire dans l'ancien fichier de log
 +
 +> **copytruncate**
 +> Truncate the original log file to zero size in place after creating a copy, instead of moving the old log file and optionally creating a new one.  It can be used when some program cannot  be  told to close its logfile and thus might continue writing (appending) to the previous log file forever.  Note that there is a very small time slice between copying the file and truncating it, so some logging data might be lost.  When this option is used, the create option will have no effect, as the old log file stays in place.
 +
 +
 +<code>
 +/var/log/supervisor/my_app_*.log {
 +  daily
 +  rotate 60
 +  copytruncate
 +  compress
 +  missingok
 +  notifempty
 +}
 +</code>
 +
 +Puis de désactivez aussi la taille max des logs et la rotation automatique
 +<code>
 +[program:my_app]
 +directory=/opt/%(program_name)s
 +command=/opt/%(program_name)s/run
 +stderr_logfile=/var/log/supervisor/%(program_name)s_stderr.log
 +stdout_logfile=/var/log/supervisor/%(program_name)s_stdout.log
 +stdout_logfile_maxbytes=0
 +stderr_logfile_maxbytes=0
 +stdout_logfile_backups=0
 +stderr_logfile_backups=0
 +</code>
 +
 +Vous pouvez aussi rediriger les logs d'erreurs dans les logs de la sortie standard avec 
 +  redirect_stderr=true
linux/supervisor.1413278943.txt.gz · Dernière modification: 14-10-2014 11:29 de edmc73