J'ai un processus long en cours d'exécution en Go sur une instance flex d'App Engine, déployée via une image docker.
La plupart du temps, lorsque je déploie la version en direct, cela envoie un SIGTERM à l'application. Je peux intercepter cela et effectuer un arrêt en douceur. C'est génial.
D'autres fois, le processus semble simplement disparaître et une nouvelle instance est créée. Je n'obtiens aucune sortie de journal; aucune indication de ce qui s'est passé. Cela semble définitivement se produire si je change le nombre d'instances (via manual_scaling) mais parfois cela se produit lors d'un déploiement normal.
Y a-t-il un moyen d'obtenir un SIGTERM de manière cohérente? Existe-t-il d'autres stratégies que je peux utiliser pour savoir quand l'instance est tuée/redémarrée?
Mise à jour : J'ai essayé quelques cas de test :
- "Supprimer" l'instance dans l'interface utilisateur d'App Engine. L'instance s'est arrêtée proprement - en envoyant des signaux - et a redémarré car elle est configurée pour avoir une seule instance.
- Déploiement, en passant de 1 à 2 instances. L'instance existante redémarrée proprement avec des signaux. La nouvelle instance est apparue.
- Déploiement, en passant de 2 à 1 instances. Une instance existante redémarrée proprement avec des signaux. L'autre est partie pouf faute d'une meilleure description. En consultant 'Tous les journaux' montrant STDERR de mon application, puis plus rien. Aucune sortie dans les journaux vm.events, vm.syslog, vm.shutdown qui rapportent beaucoup de choses intéressantes pendant le redémarrage. Je sais aussi que les signaux n'ont pas été reçus par mon application car la base de données est laissée dans un état sale.
C'est ce dernier cas sur lequel j'aimerais avoir plus d'informations, merci! Veuillez également me faire savoir s'il existe un endroit ou une meilleure façon de poser cette question.
0 votes
Rcarver, la réponse de Soni Sol était-elle utile?