diff --git i/dnsmasq.in w/dnsmasq.in
index 96b5593..384d9df 100644
--- dnsmasq.in
+++ dnsmasq.in
@@ -33,10 +33,9 @@
 NL="
 "
 
-: ${dnsmasq_pid:=/var/run/dnsmasq.pid}
-[ -s "$dnsmasq_pid" ] || dnsmasq_pid=/var/run/dnsmasq/dnsmasq.pid
 : ${dnsmasq_service:=dnsmasq}
 : ${dnsmasq_restart:=@RESTARTCMD ${dnsmasq_service}@}
+: ${dnsmasq_reload:=/usr/bin/systemctl reload ${dnsmasq_service}}
 newconf="# Generated by resolvconf$NL"
 newresolv="$newconf"
 
@@ -182,7 +181,7 @@ if $changed; then
 	eval $dnsmasq_restart
 fi
 if $dbus; then
-	$changed || kill -HUP $(cat "$dnsmasq_pid")
+	$changed || eval $dnsmasq_reload
 	# Send even if empty so old servers are cleared
 	if $dbus_ex; then
 		method=SetDomainServers
diff --git i/resolvconf.conf.5.in w/resolvconf.conf.5.in
index 81fe154..9b4f1bd 100644
--- resolvconf.conf.5.in
+++ resolvconf.conf.5.in
@@ -215,8 +215,8 @@ variables, documented below.
 Location of the dnsmasq service.
 .It Sy dnsmasq_restart
 Command to restart the dnsmasq service.
-.It Sy dnsmasq_pid
-Location of the dnsmasq pidfile.
+.It Sy dnsmasq_reload
+Command to reload the dnsmasq service.
 .It Sy libc_service
 Location of the libc service.
 .It Sy libc_restart
@@ -229,10 +229,8 @@ Command to restart the named service.
 Command to restart the pdnsd service.
 .It Sy unbound_service
 Location of the unbound service.
-.It Sy unbound_restart
-Command to restart the unbound service.
-.It Sy unbound_pid
-Location of the unbound pidfile.
+.It Sy unbound_reload
+Command to reload the unbound service.
 .Sh SEE ALSO
 .Xr resolv.conf 5
 and
diff --git i/unbound.in w/unbound.in
index 4ee0da7..5e4a326 100644
--- unbound.in
+++ unbound.in
@@ -33,9 +33,8 @@
 NL="
 "
 
-: ${unbound_pid:=/var/run/unbound.pid}
 : ${unbound_service:=unbound}
-: ${unbound_restart:=@RESTARTCMD ${unbound_service}@}
+: ${unbound_reload:=/usr/bin/systemctl reload-or-try-restart ${unbound_service}}
 newconf="# Generated by resolvconf$NL"
 
 for d in $DOMAINS; do
@@ -67,12 +66,5 @@ if [ ! -f "$unbound_conf" ] || \
 	[ "$(cat "$unbound_conf")" != "$(printf %s "$newconf")" ]
 then
 	printf %s "$newconf" >"$unbound_conf"
-	# If we can't sent a HUP then force a restart
-	if [ -s "$unbound_pid" ]; then
-		if ! kill -HUP $(cat "$unbound_pid") 2>/dev/null; then
-			eval $unbound_restart
-		fi
-	else
-		eval $unbound_restart
-	fi
+	eval $unbound_reload
 fi
