2 votes

Peut-on utiliser runit pour lancer plusieurs instances d'un même service ?

Mon logiciel fonctionne sur un seul phusion-baseimage -basée sur une image docker. Elle consiste en un couple de processus qui sont contrôlés par runit . Pour l'un de ces processus/services ( rqworker ), je dois lancer plusieurs instances sur la base d'une configuration spécifique au déploiement (qui est simplement le nombre de rqworkers parallèles). Il me semble que runit ne prend pas en charge le paramétrage du nombre d'instances lancées pour chaque service.

Existe-t-il des moyens de contourner ce problème dans runit lui-même ou dois-je plutôt utiliser quelque chose comme supervisord en tant que runit et de le laisser s'occuper des travailleurs du secteur ?

0voto

Ville Laitila Points 111

Le service multi-processus peut être facilement enveloppé en utilisant ce principe :

  • La commande finale ne doit pas produire d'erreurs, elle peut donc être sleep infinity au lieu d'un véritable processus.
  • les autres commandes sont exécutées en arrière-plan à l'aide de la fonction &

Cet extrait montre comment cela fonctionne. Mettez-le à /etc/service/your-service/run et le rendre exécutable, puis remplacer le cmd de la ligne 5 par vos appels rqworker.

#!/bin/bash
# have in env: WORKER_COUNT=7
for i in $(seq 1 $WORKER_COUNT)
do
  sleep $((i + 100)) &
done
sleep infinity

ps afx :

   21 pts/0    S+     0:00 /usr/bin/runsvdir -P /etc/service
   26 ?        Ss     0:00  \_ runsv json-server
 2525 ?        S      0:00      \_ /bin/bash ./run
 2527 ?        S      0:00          \_ /bin/bash ./run
 2541 ?        S      0:00          |   \_ sleep 101
 2528 ?        S      0:00          \_ /bin/bash ./run
 2540 ?        S      0:00          |   \_ sleep 102
 2529 ?        S      0:00          \_ /bin/bash ./run
 2539 ?        S      0:00          |   \_ sleep 103
 2530 ?        S      0:00          \_ /bin/bash ./run
 2538 ?        S      0:00          |   \_ sleep 104
 2531 ?        S      0:00          \_ /bin/bash ./run
 2537 ?        S      0:00          |   \_ sleep 105
 2532 ?        S      0:00          \_ /bin/bash ./run
 2536 ?        S      0:00          |   \_ sleep 106
 2533 ?        S      0:00          \_ /bin/bash ./run
 2535 ?        S      0:00          |   \_ sleep 107
 2534 ?        S      0:00          \_ sleep infinity

Si ce hack du sommeil infini est embarrassant, il suffit de le remplacer par une information brillante qui change. sleep infinity en

bash -c 'exec -a softagram-is-cool-and-hip-until sleep infinity' &

et nous avons terminé :

     2533 ?        S      0:00          \_ /bin/bash ./run
     2535 ?        S      0:00          |   \_ your-kick-ass-service-1
     2535 ?        S      0:00          |   \_ your-kick-ass-service-2
     2534 ?        S      0:00          \_ softagram-is-cool-and-hip-until infinity

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X