status=203/EXEC 🐧 Linux

systemd: Main process exited, code=exited, status=203/EXEC

systemd couldn’t execute the ExecStart command — the path is wrong, the file isn’t executable, or its interpreter is missing.

Seen on: Linux

Meaning

203/EXEC happens before your program runs. Causes: relative path in ExecStart (must be absolute), script without +x or shebang, CRLF line endings, SELinux label, or the binary is on a noexec mount.

Common causes

  • ExecStart path not absolute or doesn’t exist
  • Script not executable or missing shebang
  • Windows line endings in the script
  • SELinux denies exec (wrong context)
  • File in a home directory systemd can’t access (ProtectHome)

⚡ Quick fix

  1. Use an absolute path and test it as the service user
  2. chmod +x and add #!/bin/bash (or call the interpreter explicitly)
  3. Check SELinux denials and ProtectHome

Detailed fix by platform

Linux

  1. bash
    [Service]
    ExecStart=/usr/bin/node /opt/myapp/server.js
    WorkingDirectory=/opt/myapp
    User=myapp
    
    sudo systemctl daemon-reload && sudo systemctl restart myapp

How to diagnose

  1. Path — ls -l ExecStart binary
  2. Run as user — sudo -u myapp /path/to/cmd
  3. SELinux — ausearch -m avc

🔧 Still not fixed?

Many errors look alike. If the steps above didn’t solve it, one of these is probably what you’re facing:

🧠 Still stuck? Analyze your error

Paste the full message, response headers or stack trace — we'll detect the platform and point to the most likely cause.