La nouvelle API est fn(os.Signal, fn(os.Signal)) au lieu de chan+variadic. Enregistrement séparé pour .hup, .int, .term.
This commit is contained in:
@@ -120,30 +120,34 @@ pub fn (mut app App) run() ! {
|
|||||||
|
|
||||||
$if linux || macos {
|
$if linux || macos {
|
||||||
fn (mut app App) handle_signals() {
|
fn (mut app App) handle_signals() {
|
||||||
mut sigch := chan os.Signal{cap: 10}
|
// Register SIGHUP handler for config reload
|
||||||
os.signal_opt(mut sigch, .int, .term, .hup) or { panic(err) }
|
os.signal_opt(.hup, fn [mut app] (sig os.Signal) {
|
||||||
for {
|
app.logger.info('server', 'reload', 'SIGHUP received, reloading config...')
|
||||||
sig := <-sigch
|
new_cfg := load_config(app.config_path) or {
|
||||||
match sig {
|
app.logger.error('server', 'reload', 'failed to reload config: ${err}')
|
||||||
.hup {
|
return
|
||||||
app.logger.info('server', 'reload', 'SIGHUP received, reloading config...')
|
|
||||||
new_cfg := load_config(app.config_path) or {
|
|
||||||
app.logger.error('server', 'reload', 'failed to reload config: ${err}')
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
app.cfg = new_cfg
|
|
||||||
app.webhook_routes = build_webhook_routes(new_cfg)
|
|
||||||
app.ntfy = new_ntfy_client(new_cfg.server, app.logger)
|
|
||||||
app.dedup = new_dedup(new_cfg.dedup)
|
|
||||||
app.logger.info('server', 'reload', 'config reloaded successfully')
|
|
||||||
}
|
|
||||||
.int, .term {
|
|
||||||
app.logger.info('server', 'shutdown', 'received signal, shutting down...')
|
|
||||||
app.shutdown_flag = true
|
|
||||||
time.sleep(500 * time.millisecond)
|
|
||||||
exit(0)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
app.cfg = new_cfg
|
||||||
|
app.webhook_routes = build_webhook_routes(new_cfg)
|
||||||
|
app.ntfy = new_ntfy_client(new_cfg.server, app.logger)
|
||||||
|
app.dedup = new_dedup(new_cfg.dedup)
|
||||||
|
app.logger.info('server', 'reload', 'config reloaded successfully')
|
||||||
|
}) or { panic(err) }
|
||||||
|
|
||||||
|
// Common shutdown handler for SIGINT and SIGTERM
|
||||||
|
shutdown := fn [mut app] (sig os.Signal) {
|
||||||
|
app.logger.info('server', 'shutdown', 'received signal, shutting down...')
|
||||||
|
app.shutdown_flag = true
|
||||||
|
time.sleep(500 * time.millisecond)
|
||||||
|
exit(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
os.signal_opt(.int, shutdown) or { panic(err) }
|
||||||
|
os.signal_opt(.term, shutdown) or { panic(err) }
|
||||||
|
|
||||||
|
// Keep goroutine alive
|
||||||
|
for {
|
||||||
|
time.sleep(60 * time.second)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user