From 32be8c193d9ca99ce52cd360724f5ecc8f144a79 Mon Sep 17 00:00:00 2001 From: Xiaobo Liu Date: Tue, 16 Jan 2024 21:25:00 +0800 Subject: [PATCH] server: support config reload (#13) Signed-off-by: Xiaobo Liu --- README.md | 10 +++++++++- server/src/bin/server.rs | 18 ++++++++++++++---- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index e9316d5..21eb663 100644 --- a/README.md +++ b/README.md @@ -69,6 +69,15 @@ $ netguard-tool keygen --help ``` +### Reload config + +Reload `netguard-server` config file: + +```shell +$ pkill -HUP netguard-server +``` + + ## Build Build release version. @@ -87,7 +96,6 @@ $ cargo build --release - Add query and reject connection Interfaces - More certificate signing algorithms -- Reload configuration file - Hot update bin executable program - Audit log - Knock SDK APIs diff --git a/server/src/bin/server.rs b/server/src/bin/server.rs index aeebda0..5c304ea 100644 --- a/server/src/bin/server.rs +++ b/server/src/bin/server.rs @@ -3,7 +3,7 @@ use std::sync::Arc; use anyhow::Result; use clap::Parser; -use signal_hook::consts::{SIGINT, SIGQUIT, SIGTERM}; +use signal_hook::consts::{SIGHUP, SIGINT, SIGQUIT, SIGTERM}; use signal_hook::iterator::Signals; use tikv_jemallocator::Jemalloc; use tracing::{debug, info}; @@ -59,7 +59,7 @@ fn main() -> Result<()> { iptables::rules_create(&config)?; - wait_for_signal()?; + wait_for_signal(&args, &workers)?; iptables::rules_destroy(&config)?; @@ -68,8 +68,8 @@ fn main() -> Result<()> { Ok(()) } -fn wait_for_signal() -> Result<()> { - let sigs = vec![SIGTERM, SIGQUIT, SIGINT]; +fn wait_for_signal(args: &Args, workers: &[Worker]) -> Result<()> { + let sigs = vec![SIGTERM, SIGQUIT, SIGINT, SIGHUP]; let mut signals = Signals::new(sigs)?; @@ -77,6 +77,16 @@ fn wait_for_signal() -> Result<()> { debug!("Received a signal {:?}", signal); match signal { + SIGHUP => match Config::from_file(&args.config) { + Ok(new_config) => { + for worker in workers { + worker.update_config(new_config.clone()); + } + } + Err(e) => { + info!("Failed to reload config: {e}") + } + }, term_sig => { info!("Received a termination signal {:?}", term_sig); break;