Comment réaliser un arrêt gracieux ? Comment savoir quand il est temps de faire un arrêt gracieux ?
sobes.tech IA
Réponse de l'IA
Un arrêt gracieux (graceful shutdown) est la terminaison correcte d'une application, où elle parvient à terminer ses opérations en cours, à libérer les ressources et à fermer correctement les connexions.
En Go, cela est généralement réalisé en capturant les signaux système (par exemple, SIGINT, SIGTERM) à l'aide du paquet os/signal. Lorsqu'une application reçoit un signal de terminaison, elle commence le processus d'arrêt gracieux.
Exemple:
import (
"context"
"fmt"
"net/http"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
srv := &http.Server{Addr: ":8080"}
// Canal pour les signaux
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-quit
fmt.Println("Arrêt du serveur...")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := srv.Shutdown(ctx); err != nil {
fmt.Println("Le serveur a été forcé à s'arrêter:", err)
}
}()
if err := srv.ListenAndServe(); err != http.ErrServerClosed {
fmt.Println("Erreur du serveur:", err)
}
fmt.Println("Serveur arrêté correctement")
}
Comprendre quand effectuer un arrêt gracieux peut se faire via des signaux du système d'exploitation ou des événements internes (par exemple, commande de l'administrateur, dépassement de limites, erreurs). En général, cela est détecté par des signaux externes de terminaison du processus.