Ce package contient une solution pour redémarrer automatiquement les services Docker Swarm après un reboot du serveur. Il résout le problème où les services tentent de démarrer avant que le cluster Swarm ne soit complètement stable.
celery_stack_celery_flowercelery_stack_celery_workerchat_studio_postgres_chat_studio
- 4 nœuds managers : databases, host2, host3, host4
- Leader actuel : host3
- Contraintes : Tous les services problématiques sont actuellement contraints au nœud "databases"
- restart-swarm-services.sh : Script qui attend la stabilisation du Swarm et redémarre les services
- restart-swarm-services.service : Service systemd qui lance le script au boot
- deploy-to-all-nodes.sh : Script pour déployer sur tous les nœuds managers
- verify-deployment.sh : Script pour vérifier l'installation sur tous les nœuds
Cette option est recommandée pour :
- Gérer de futurs services sans contraintes de placement
- Maintenir une cohérence de configuration sur tout le cluster
- Éviter les problèmes si les contraintes changent
cd /home/fsebb/data_proces/swarm-restart-service
./deploy-to-all-nodes.shPrérequis : Accès SSH configuré avec clés SSH vers tous les nœuds (host2, host3, host4)
Si vous voulez installer uniquement sur le nœud "databases" (suffisant pour les services actuels) :
cd /home/fsebb/data_proces/swarm-restart-service
# Copier le script
sudo cp restart-swarm-services.sh /usr/local/bin/
sudo chmod +x /usr/local/bin/restart-swarm-services.sh
# Installer le service systemd
sudo cp restart-swarm-services.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable restart-swarm-services.servicePour installer sur d'autres nœuds, connectez-vous via SSH et répétez les commandes ci-dessus.
./verify-deployment.sh# Vérifier que le service est activé
systemctl status restart-swarm-services.service
# Vérifier que le script existe
ls -l /usr/local/bin/restart-swarm-services.sh# Tester le script (redémarre les services si nécessaire)
sudo /usr/local/bin/restart-swarm-services.sh
# Voir les logs
sudo cat /var/log/restart-swarm-services.logLe service s'exécutera automatiquement. Pour vérifier :
# Voir les logs systemd
sudo journalctl -u restart-swarm-services.service
# Voir les logs détaillés du script
sudo cat /var/log/restart-swarm-services.log
# Vérifier l'état des services
docker service ls | grep -E "(celery_stack|chat_studio)"- Au démarrage du serveur, systemd attend que Docker soit actif
- Le script vérifie que Docker est complètement démarré
- Le script attend que Swarm soit actif
- Le script attend que les nœuds du cluster soient connectés
- Le script attend 30 secondes supplémentaires pour la stabilisation
- Le script vérifie chaque service et force un redémarrage si nécessaire (replicas à 0)
- Tous les logs sont enregistrés dans
/var/log/restart-swarm-services.log
Si vous n'avez pas encore configuré l'accès SSH par clés :
# Sur le nœud databases, générer une clé si nécessaire
ssh-keygen -t ed25519 -C "databases-swarm"
# Copier la clé vers les autres nœuds
ssh-copy-id host2
ssh-copy-id host3
ssh-copy-id host4
# Tester
ssh host2 "echo test"
ssh host3 "echo test"
ssh host4 "echo test"Pour désinstaller sur un nœud :
sudo systemctl disable restart-swarm-services.service
sudo rm /etc/systemd/system/restart-swarm-services.service
sudo rm /usr/local/bin/restart-swarm-services.sh
sudo rm /var/log/restart-swarm-services.log
sudo systemctl daemon-reload-
Vérifier que le service systemd s'est bien exécuté :
sudo journalctl -u restart-swarm-services.service
-
Vérifier les logs du script :
sudo cat /var/log/restart-swarm-services.log
-
Tester manuellement :
sudo /usr/local/bin/restart-swarm-services.sh
Vérifier que les noms des services sont corrects :
docker service lsSi les noms ont changé, modifier le tableau SERVICES dans le script /usr/local/bin/restart-swarm-services.sh
Augmenter le délai dans le script :
sudo nano /usr/local/bin/restart-swarm-services.sh
# Modifier la ligne : sleep 30
# Par exemple : sleep 60- Le script ne redémarre que les services qui ont 0 réplicas actifs
- Les services déjà actifs ne sont pas touchés
- Le script attend jusqu'à 2 minutes que le cluster soit stable
- Les logs sont conservés et ne sont pas effacés automatiquement