Fixing a systemd service 203/EXEC failure (no such file or directory)

BashSystemd

Bash Problem Overview


I'm trying to set up a simple systemd timer to run a bash script every day at midnight.

systemctl --user status backup.service fails and logs the following:

backup.service: Failed at step EXEC spawning /home/user/.scripts/backup.sh: No such file or directory.

backup.service: Main process exited, code=exited, status=203/EXEC
Failed to start backup.
backup.service: Unit entered failed state.
backup.service: Failed with result 'exit-code'.

I'm lost, since the files and directories exist. The script is executable and, just to check, I've even set permissions to 777.

Some background:

The backup.timer and backup.service unit files are located in /home/user/.config/systemd/user.

backup.timer is loaded and active, and currently waiting for midnight.

Here's what it looks like:

[Unit]
Description=Runs backup at 0000

[Timer]
OnCalendar=daily
Unit=backup.service

[Install]
WantedBy=multi-user.target

Here's backup.service:

[Unit]
Description=backup

[Service]
Type=oneshot
ExecStart=/home/user/.scripts/backup.sh

[Install]
WantedBy=multi-user.target

And lastly, this is a paraphrase of backup.sh:

#!/usr/env/bin bash

rsync -a --delete --quiet /home/user/directory/ /mnt/drive/directory-backup/

The script runs fine if I execute it myself.

Not sure if it matters, but I use fish as my shell (started from .bashrc).

I'm happy to post the full script if that's helpful.

Bash Solutions


Solution 1 - Bash

I think I found the answer:

In the .service file, I needed to add /bin/bash before the path to the script.

For example, for backup.service:

ExecStart=/bin/bash /home/user/.scripts/backup.sh

As opposed to:

ExecStart=/home/user/.scripts/backup.sh

I'm not sure why. Perhaps fish. On the other hand, I have another script running for my email, and the service file seems to run fine without /bin/bash. It does use default.target instead multi-user.target, though.

Most of the tutorials I came across don't prepend /bin/bash, but I then saw this SO answer which had it, and figured it was worth a try.

The service file executes the script, and the timer is listed in systemctl --user list-timers, so hopefully this will work.

Update: I can confirm that everything is working now.

Solution 2 - Bash

To simplify, make sure to add a hash bang to the top of your ExecStart script, i.e.

#!/bin/bash

python -u alwayson.py    

Solution 3 - Bash

When this happened to me it was because my script had DOS line endings, which always messes up the shebang line at the top of the script. I changed it to Unix line endings and it worked.

Solution 4 - Bash

I ran across a Main process exited, code=exited, status=203/EXEC today as well and my bug was that I forgot to add the executable bit to the file.

Solution 5 - Bash

If that is a copy/paste from your script, you've permuted this line:

#!/usr/env/bin bash

There's no #!/usr/env/bin, you meant #!/usr/bin/env.

Solution 6 - Bash

try running:

systemctl daemon-reload

and then again run

service <yourservice> status

Solution 7 - Bash

I faced a similar issue, changed the permission and added executable permission

use chmod +x /etc/systemd/system/<service-filename>

This worked for me

Solution 8 - Bash

I actually used the answer from https://stackoverflow.com/questions/4018154/how-do-i-run-a-node-js-app-as-a-background-service combined with what dwrz said above. In my case, I was creating a Discord bot that needed to be able to run when I was not around.

With this service in place, I initially got the same error that the initial poster did, which brought me here. I was missing the #!/usr/bin/env node at the top of my executed node.js script.

Since then, no problems, although I intend to see what else can be extended to the service itself.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiondwrzView Question on Stackoverflow
Solution 1 - BashdwrzView Answer on Stackoverflow
Solution 2 - BashcrizCraigView Answer on Stackoverflow
Solution 3 - Bashke4ukzView Answer on Stackoverflow
Solution 4 - BashKarl PokusView Answer on Stackoverflow
Solution 5 - BashIvan SavcicView Answer on Stackoverflow
Solution 6 - BashfccoelhoView Answer on Stackoverflow
Solution 7 - BashRajeevView Answer on Stackoverflow
Solution 8 - BashWireheadView Answer on Stackoverflow