J'ai un processus long en cours d'exécution dans Go sur une instance App Engine flex, déployée via une image docker.
La plupart du temps, lorsque je déploie la version live, elle envoie un SIGTERM à l'application. Je peux l'attraper et faire 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 se produire si je modifie le nombre d'instances (via manual_scaling) mais parfois cela se produit lors d'un déploiement normal.
Existe-t-il un moyen d'obtenir un SIGTERM de manière cohérente ? Y a-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 de l'App Engine. L'instance s'est arrêtée proprement - en envoyant des signaux - et a redémarré puisqu'elle est configurée pour avoir une seule instance.
- Déployer, en passant de 1 à 2 instances. L'instance existante a redémarré proprement avec des signaux. La nouvelle instance est apparue.
- Déployer, en passant de 2 à 1 instance. Une instance existante a redémarré proprement avec des signaux. L'autre s'est pouf faute d'une meilleure description. L'affichage de "All logs" montre 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 également 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 sur ce dernier cas que j'aimerais avoir plus d'informations, merci ! Veuillez également me faire savoir s'il existe un meilleur endroit ou une meilleure façon de poser cette question.
0 votes
Rcarver, la réponse de Soni Sol a-t-elle été utile ?