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).

  • Björn Tantau
    link
    fedilink
    English
    22 days ago

    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.

    • @[email protected]
      link
      fedilink
      English
      42 days ago

      It’s not sus at all. The reason /home is in /var is because /var and /etc are 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.

    • @[email protected]
      link
      fedilink
      English
      22 days ago

      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.

      • BlackEcoOP
        link
        fedilink
        English
        12 days ago

        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.

        • @[email protected]
          link
          fedilink
          English
          1
          edit-2
          2 days ago

          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.

    • BlackEcoOP
      link
      fedilink
      English
      22 days ago

      I haven’t seen anyone properly manage to do that yet, so good luck.

      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.