[1/2] knot-resolver: Add force-reload

Message ID 20261113134243.382773-2-antonio@mandelbit.com
State New
Headers
Series Fix DNS-over-TLS after changing DNS settings (#14781) |

Commit Message

Antonio Quartulli 13 Nov 2026, 1:42 p.m. UTC
A reload doesn't restart the workers when config.yaml is unchanged, so
they keep what their Lua script set up at startup. force-reload (also
available through dnsctrl) replaces them with a rolling restart.

Signed-off-by: Antonio Quartulli <antonio@mandelbit.com>
---
 src/initscripts/system/knot-resolver | 9 ++++++++-
 src/misc-progs/dnsctrl.c             | 7 +++++++
 2 files changed, 15 insertions(+), 1 deletion(-)
  

Patch

diff --git a/src/initscripts/system/knot-resolver b/src/initscripts/system/knot-resolver
index 980a095f3..a27323b37 100644
--- a/src/initscripts/system/knot-resolver
+++ b/src/initscripts/system/knot-resolver
@@ -45,6 +45,13 @@  case "${1}" in
 			--config=/etc/knot-resolver/config.yaml reload
 		;;
 
+	force-reload)
+		# Replace the workers too, so that they re-run the Lua script
+		# (e.g. to register the DNS-over-TLS forwarders)
+		/usr/bin/kresctl \
+			--config=/etc/knot-resolver/config.yaml reload --force
+		;;
+
 	restart)
 		${0} stop
 		sleep 1
@@ -56,7 +63,7 @@  case "${1}" in
 		;;
 
 	*)
-		echo "Usage: ${0} {start|stop|reload|restart|status}"
+		echo "Usage: ${0} {start|stop|reload|force-reload|restart|status}"
 		exit 1
 		;;
 esac
diff --git a/src/misc-progs/dnsctrl.c b/src/misc-progs/dnsctrl.c
index 84b0ae211..66007c8f7 100644
--- a/src/misc-progs/dnsctrl.c
+++ b/src/misc-progs/dnsctrl.c
@@ -28,6 +28,13 @@  int main(int argc, char** argv) {
 
 		return run("/etc/rc.d/init.d/knot-resolver", args);
 
+	} else if (strcmp(argv[1], "force-reload") == 0) {
+		char* args[] = {
+			"force-reload", NULL,
+		};
+
+		return run("/etc/rc.d/init.d/knot-resolver", args);
+
 	} else if (strcmp(argv[1], "sync-rpzs") == 0) {
 		char* args[] = {
 			NULL,