Symptoms & scope
- The process reports status=203/EXEC.
- The normal application startup message never appears.
Relevant environment
systemd system services; interpreter and executable paths depend on the distribution.
Recognizable messages (synthetic examples)
systemd[1]: example.service: Main process exited, code=exited, status=203/EXECInspect execve prerequisites before debugging the application itself.
Possible causes
These are possible explanations, not a confirmed diagnosis. Several independent faults can coexist.
- A stale ExecStart path, missing interpreter or incompatible binary can prevent execve.
- File access, noexec mounts or the service root may differ from the interactive shell.
Diagnose safely
Run one command at a time in the relevant session. Read the explanation first. Uppercase placeholders need your own values; tools and privileges vary by distribution. These commands are displayed here and never executed by the website.
Check 1
Replace example.service with the failing unit; normally readable without elevation.
systemctl show example.service -p ExecStart -p RootDirectory -p UserInterpret the result: Read the actual executable, not a shell alias. RootDirectory changes which paths exist for the child.
Check 2
Replace the path with the executable from ExecStart; this only lists path metadata.
namei -l /opt/example/bin/serverInterpret the result: Every parent directory needs traversal permission. An existing executable still needs its ELF loader or shebang interpreter.
Check 3
Use the same unit; system journal visibility may require administrative read permission.
journalctl -b -u example.service --no-pager -n 60Interpret the result: The error before 203/EXEC distinguishes absent files, denied access and executable format failures; 203 alone does not.
Evidence-guided next steps
Correct the executable or interpreter
If the logged path is absent, point ExecStart to the installed executable. Fix a script shebang to an interpreter available inside the service root. On NixOS, reference the package path declaratively.
Precautions: Keep the prior unit and arguments. ExecStart is not implicitly run through a shell.
Recovery / rollback: Restore the prior unit, reload the manager and restart only this service at a suitable time.
Did this solution help you?
Restore the necessary execution access
If traversal permissions or a noexec mount explain the error, grant the service identity specific path access or deploy the executable to a suitable filesystem. Investigate mandatory access-control denials separately.
Precautions: Record ownership and modes first. Do not broadly open application data or remount unrelated filesystems.
Recovery / rollback: Restore the recorded permissions or original deployment path and unit definition.
Did this solution help you?
References & review
This guide was prepared from primary project or distribution sources and reviewed on the date shown. This is an editorial source check, not evidence that a fix was reproduced on your hardware. Diagnostic log examples are synthetic fixtures. Version-dependent details must be checked against your installed release.
- systemd.exec — upstream manual hosted by Debian (project or distribution documentation)
- systemd.service — upstream manual hosted by Debian (project or distribution documentation)