Hello,
I have been trying to create a system service that would run a script on shutdown (hence why I went for a system service over a user service) and landed on something like this
[Unit]
Description=Run backup script on shutdown
DefaultDependencies=no
Before=poweroff.target halt.target
Requires=network.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/bin/true
ExecStop=/var/home/blackeco/scripts/backup.sh
User=blackeco
Group=blackeco
[Install]
WantedBy=poweroff.target halt.target
Unfortunately, when the shutdown occurs, systemd fails to execute the script:
backup-on-shutdown.service: Unable to locate executable '/var/home/blackeco/scripts/backup.sh': Permission denied
backup-on-shutdown.service: Failed at step EXEC spawning /var/home/blackeco/scripts/backup.sh: Permission denied
This script is correctly owned by user blackeco
and permissions look fine
$ ls -la /var/home/blackeco/scripts
drwxr-xr-x. 1 blackeco blackeco 154 5 Feb. 13:50 ./
drwxr-xr-x. 1 blackeco blackeco 116 3 Feb. 13:07 ../
-rwxr-xr-x. 1 blackeco blackeco 794 4 Feb. 15:44 backup.sh*
I’m very puzzled as to why. I’m running Bluefin 41 (itself based on Fedora Silverblue 41).
From what I gathered from the comments, system services cannot access the home directory by design: user services should be used instead.
But since it is nearly impossible to execute a user service on shutdown, I changed my approach and went for a user service and a timer that initiates a backup every 15 minutes. Since the backups are incremental, it shouldn’t take too much time nor space.
How long does it take to run? Can you run it on login and then execute what you need when you receive the sigkill signal?