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).
18 Comments
BlackEco@lemmy.blackeco.com · 5 pts · 1y
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.
ryannathans@aussie.zone · 1 pts · 1y
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?
that_leaflet@lemmy.world · 2 pts · 1y
BlackEco@lemmy.blackeco.com · 2 pts · 1y
As I said, this is a system service
that_leaflet@lemmy.world · 4 pts · 1y
BlackEco@lemmy.blackeco.com · 3 pts · 1y
I would try
ProtectHome=read-onlybut then restic wouldn't be able to write its local cache to~/.restic.I went for a user service first to make my life easier, but unfortunately you can't use targets
poweroff.targetandhalt.targetI may be in a bind then...
bjoern_tantau@swg-empire.de · 2 pts · 1y
Can you put the script somewhere else in var?
/usr/localor/optare usually for distro-external stuff.BlackEco@lemmy.blackeco.com · 1 pts · 1y
I could, but I need the script to access my home in order to do the backup, and from what I gathered from Leaflet system services can't access it.
bjoern_tantau@swg-empire.de · 2 pts · 1y
I'm not familiar with Silverblue but home being in /var is sus. Usually it's in /home. But maybe it's mounted in a weird Silverblue way and gets unmounted before it runs.
But running scripts on shutdown is hard to impossible. I always wanted to run automatic updates on shutdown but they don't have networking even if the unit file requires networking. I haven't seen anyone properly manage to do that yet, so good luck. And please make a post if it does end up working. Then I will revisit my own efforts again.
Telorand@reddthat.com · 4 pts · 1y
It's not sus at all. The reason
/homeis in/varis because/varand/etcare the only writeable directories on the system. There is a/home, but it's actually just a symlink to/var/home.This is how all of the Fedora atomic systems are set up, and it's been the case for a lot of the other immutable distros I've tried. It's just a different way of doing things.
whatsgoingdom@rollenspiel.forum · 2 pts · 1y
If that's the reason maybe OP can add the shutdown as the last step on the script and execute the script instead of the shut down button as a work around.
BlackEco@lemmy.blackeco.com · 1 pts · 1y
No, I really don't want to hijack the UI for this, as it could break with a DE update. And that wouldn't work when shutting down from the console.
whatsgoingdom@rollenspiel.forum · 1 pts · 1y
Doesn't have to be, e.g. I have a stream deck and mapped a script to one of the buttons. Or put it as an executable file on your desktop or wherever and use it instead of the normal shutdown button.
BlackEco@lemmy.blackeco.com · 2 pts · 1y
Yes, that's the whole problem, Internet is littered with posts on running a script on shutdown but none of my attempts so far has been successful.
Kerb@discuss.tchncs.de · 1 pts · 1y
is your home folder actually under /var/home/... not under /home/... ?
does the scripr run correctly when you paste the full path in the comandline?
that_leaflet@lemmy.world · 4 pts · 1y
BlackEco@lemmy.blackeco.com · 4 pts · 1y
Yep, it's how Silverblue is set up
Yes
Telorand@reddthat.com · 1 pts · 1y
This might be a weird thing with how the environment variables get passed around. I'll see if I can find my own service I wrote, but I remember having to do something with
envin theExecStartpart to get my daemon to run.Maybe you'll find a clue about that in the meantime!
BestBouclettes@jlai.lu · 1 pts · 1y
What are the permissions all the way to the script ? Can
blackecoreach the script ?BlackEco@lemmy.blackeco.com · 1 pts · 1y
And yes,
blackecocan reach itBestBouclettes@jlai.lu · 1 pts · 1y
Can you manually run the script ?