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