A firewalld reload error means the saved configuration could not be rebuilt into the running firewall. The running daemon may still enforce the previous rule set, so troubleshoot from the original reload failure and validate the permanent configuration before retrying the reload.
Most reload failures come from permanent configuration problems such as malformed XML, an unknown service name, an invalid port value, or a local object that was deleted while a zone still references it. The fastest path is to run --check-config, inspect the named file or object, fix that one error, and reload again.
The example fixes a zone that references a custom service named internal-api before the service definition exists. Keep a copy of the changed file or command output in the change ticket, because a successful reload proves syntax but not necessarily that the intended traffic path works.
Related: Check firewalld status
Related: Create a custom firewalld service
Related: Save runtime firewalld rules permanently
$ sudo firewall-cmd --reload Error: INVALID_SERVICE: Zone 'public': service 'internal-api' is not among existing services
Do not run repeated reloads without reading the error. A reload replaces runtime-only rules with permanent configuration when it succeeds, so repeated attempts can hide which change caused the original failure.
$ sudo firewall-cmd --state running
If the daemon is not running, inspect systemctl status firewalld.service --no-pager before editing zone files.
Related: Check firewalld status
$ sudo firewall-cmd --check-config Error: INVALID_SERVICE: Zone 'public': service 'internal-api' is not among existing services
--check-config validates permanent XML and semantic references without relying on a successful reload.
$ sudo firewall-cmd --permanent --path-zone=public /etc/firewalld/zones/public.xml
$ sudo sed -n '1,80p' /etc/firewalld/zones/public.xml <?xml version="1.0" encoding="utf-8"?> <zone> <service name="ssh"/> <service name="internal-api"/> </zone>
The problem is the service reference, not the whole zone. Fix the named object or remove the stale reference instead of replacing the zone with a generic default.
$ sudo firewall-cmd --permanent --info-service=internal-api Error: INVALID_SERVICE: internal-api
$ sudo firewall-cmd --permanent --zone=public --remove-service=internal-api success
Create the missing custom service instead when the zone should keep allowing that application.
Related: Create a custom firewalld service
$ sudo firewall-cmd --check-config success
$ sudo firewall-cmd --reload success
$ sudo firewall-cmd --zone=public --list-services dhcpv6-client ssh
$ sudo firewall-cmd --zone=public --query-service=internal-api no
If the reload succeeds but application traffic still fails, continue with a blocked-connection check rather than editing the reload fix again.