Senior
Kā īstenot glītu slēgšanu? Kā saprast, kad ir pienācis laiks veikt glītu slēgšanu?
sobes.tech AI
Atbilde no AI
Maiga izslēgšana (graceful shutdown) ir pareiza programmas noslēgšana, kurā tā spēj pabeigt pašreizējās operācijas, atbrīvot resursus un pareizi aizvērt savienojumus.
Go valodā tas parasti tiek īstenots, noķerot sistēmas signālus (piemēram, SIGINT, SIGTERM) ar os/signal paketi. Kad programma saņem izbeigšanas signālu, tā sāk maigas izslēgšanas procesu.
Piemērs:
import (
"context"
"fmt"
"net/http"
"os"
"os/signal"
"syscall"
"time"
)
func main() {
srv := &http.Server{Addr: ":8080"}
// Signālu kanāls
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
go func() {
<-quit
fmt.Println("Serveris tiek slēgts...")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if err := srv.Shutdown(ctx); err != nil {
fmt.Println("Serveris tika piespiedu kārtā slēgts:", err)
}
}()
if err := srv.ListenAndServe(); err != http.ErrServerClosed {
fmt.Println("Servera kļūda:", err)
}
fmt.Println("Serveris tika pareizi slēgts")
}
Saprotot, kad ir laiks veikt maigu izslēgšanu, tas parasti balstās uz operētājsistēmas signāliem vai iekšējiem notikumiem (piemēram, administratora komanda, limitu pārsniegšana, kļūdas). Parasti tas tiek noteikts, saņemot ārējos signālus procesa pārtraukšanai.