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

main process exited, code=exited, status=203/exec python
(code=exited, status=126)
vault.service: main process exited, code=exited, status=203/exec
code=exited, status=127
main process exited code=exited status=203/exec spring boot
failed at step exec spawning
main process exited, code=exited, status=126/n/a
status=203/exec gunicorn

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.

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.

Fixing a systemd service 203/EXEC failure (no such file or , Fixing a systemd service 203/EXEC failure (no such file or directory). bash systemd. I'm trying to set up a simple systemd timer to run a bash script every day at  The command that you specify with ExecStart in your service file will not run in a shell. This means that the filename globbing pattern * will not be expanded and that cp will be called with /opt/test-bak/* as the single literal source path to copy.

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.

Fixing a systemd service 203/EXEC failure (no such file or directory), 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  Correction d'une panne du service 203/EXEC de systemd (pas de tel fichier ou répertoire)) No such file or directory. backup.service: Main process exited, code

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

#!/bin/bash

python -u alwayson.py    

Startup script fails with (code=exited, status=203/EXEC), raspberrypi:~ $ systemctl status StreamToYouTube.service Normally, such a script could be scheduled with a systemd service file to make sure network is ready before it goes This part does not work as standard, sometimes it fails. Every time I rebooted the Pi, fsck ended up fixing a bunch of problems  The systemd WorkingDirectory= setting defines on which directory the service will be launched, same as when you use cd to change a directory when you're working in the shell. That doesn't mean that all the other paths (including that from ExecStart= ) will now be relative to it, so you still need to fully specify the path to your script in that

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.

systemd "status=203/EXEC" error when creating new service, pi@raspberrypi:~ $ systemctl status ReadPressure.service. Paraphrasing @Ingo from I fail to start a python program in Thonny on startup. The error message (​code=exited, status=203/EXEC) is often seen when the no shebang (first line) internal files in your script might be missing access permissions. Submission type Bug report systemd version the issue has been seen with 236.0-2 Used distribution ArchLinux Expected behaviour you didn't see /run/systemd/netif/ subfolders should be written correctly at start and subsequent writes to it

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.

Fixing a systemd service 203/EXEC failure (no such file or directory , 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: I did that and it didn't help, at least not right away. Neither did restarting the service. However, after updating kernel and systemd to newer version which were meanwhile released and therefore after rebooting the machine, it somehow resolved itself.

Unable to start services running Ubuntu 18.4.3 new install , Failed to enable unit: Unit file genieacs-cwmp.service does not exist. The fix is to move the file: Main process exited, code=exited, status=203/EXEC bash: cd: /etc/systemd/system/genieacs-cwmp.service.d: No such file or directory to give that user access either by group or directly. on the directory. Could we get an actual design decision/reply on this? As in "we explicitly disallow this because [good reasons]", or "we don't do this because it's tricky in code", or even "we just don't implement this yet" (where it should get a issue to be implemented).

18.04, So my advice here in order to fix the issue you're seeing is to just update the ExecStart= to list the full path to your script. share. I'm trying to set up a simple systemd timer to run a bash script every day at midnight. Fixing a systemd service 203/EXEC failure (no such file or directory

[SOLVED]Starup sript not getting executed in systemd / Newbie , Below shown in my service file (rpi_user.service) Main PID: 247 (code=exited, status=203/EXEC) CGroup: name=systemd:/system/rpi_user.service. Sep 23 03:​29:08 alarmpi systemd[247]: Failed at step EXEC spawning 2) Could you help me in fixing the issue - how can I make my starup script run ?

Comments
  • What does ls -l /home/user/.scripts/backup.sh output ? The start of your backup.sh script looks very strange: #!/user/env/bin bash , does the executable /user/env/bin actually exist ? Are you sure you didn't mean /usr/bin/env or /home/user/bin/env ?
  • ls outputs -rwxrwxrwx 1 dwrz dwrz 1470 Aug 11 01:57 /home/user/.scripts/backup.sh. And my apologies -- the typo in the shebang was when I was copying things over to here. It's /usr/ in the script.
  • Aside: Starting fish from .bashrc is a really bad idea. Update your /etc/passwd entry to directly specify fish, don't confuse programs that may intentionally want to run an interactive bash instance by making it start a different, incompatible shell instead.
  • As for the immediate issue at hand, I'd start by reproducing it with Sysdig tracing execution; that way you can find the exact syscall that fails and extract pertinent details (active PATH, uid, gid, etc).
  • BTW, is there a PATH set when your service is invoked? If env bash can't find bash because there's no PATH, that would cause your bug. Setting Environment=PATH=/bin:/usr/bin or otherwise a known-good value in the .service wouldn't hurt.
  • This solved it for me. The reason it works with other scripts is that they have a shebang (#!/bin/bash) at the beginning while this particular one had not.
  • this work around is super annoying, writing a #! line tells the kernel what interpreter to use, now I have to mirror this information in a unit file for applications that aren't singletons -_- what
  • Even when the executable is not a bash script, such as in my case, jupyter on CentOS 7, /bin/bash -c "..." is necessary. I think it is because it's a python script, and it has a shebang of python at the very beginning.
  • Scripts should have an interpreter, otherwise they're not a script. You should fix the script, rather than add bash to your .service file.
  • Sometimes you need a chmod +x /home/user/.scripts/backup.sh.
  • You saved my life! I just added #!/usr/bin/env bash at the first line of the .sh then worked.
  • Nice catch! The script is correct now, but it's possible I may have fixed it afterwards. It if it was a copy-paste, this would have explained it.