2017-08-18 7 views
0

Un démarrage du service par Upstart ou systemd et je veux le mettre à jour à chaud. Après la mise à jour, le nouveau processus de service est en cours d'exécution, puis supprime l'ancien processus de service qui démarre par upstart ou systemd. Enfin, le nouveau processus peut être surveillé par upstart ou systemd comme l'ancien processus.Mise à jour à chaud d'un service démarré par upstart ou systemd

Répondre

0

Vous n'avez pas dit ce que fait votre service. Je réponds pour le cas facile, un service réseau avec des connexions de courte durée, comme un serveur HTTP.

  1. Avoir le système propriétaire du socket. Recherchez "activation de socket systemd" (stackoverflow search). Je décris comment faire dans Go ici: https://www.darkcoding.net/software/systemd-socket-activation-in-go/
  2. Pendant que le service est en cours d'exécution, remplacez le binaire sur le disque avec le nouveau.
  3. systemctl restart <myservice>

Dans la pratique, il y aura souvent aussi un état dans votre service, vous devrez persister à l'arrêt, et la charge au démarrage.

Le service d'arrêt peut avoir besoin d'attendre un court instant avant que toutes les requêtes soient terminées. Pour le cas le plus difficile avec de nombreuses connexions TCP de longue durée (comme un serveur XMPP), il ne s'agit plus de systemd, vous devez faire en sorte que vos anciens et nouveaux processus se coordonnent pour passer les sockets de l'un à l'autre . Je le décris au Online upgrades in Go, mais c'est beaucoup plus de travail.