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

**Code:** `status=203/EXEC` · **Category:** Linux · **Seen on:** Linux

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

## 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

---
Source: [WhatIsMyError](https://whatismyerror.com/errors/linux/status-203-exec)
