2

In /boot/config.txt I did put

dtoverlay=gpio-shutdown,active_low=1,gpio_pull=up

Now if I short GPIO 3 - the Pi does shutdown immediately.

But how can I run some shell script before shutting down via GPIO 3 shorting?

VextoR
  • 141
  • 7

1 Answers1

3

Try adding a systemd service (example) which runs your script shortly before shutdown:

[Unit]
Description=Shutdown actions

[Service] Type=oneshot RemainAfterExit=true ExecStart=/bin/true ExecStop=/path/to/script

[Install] WantedBy=sysinit.target

ExecStart action is set to a program which finishes right away, so you need RemainAfterExit=true to keep the service running from the systemd point of view. Don't forget to enable your service with sudo systemctl enable my.service

If you need to distinguish between shutdown and reboot, one possible solution is to check which target is active from inside your script. Try running systemctl is-active poweroff.target and systemctl is-active reboot.target, and analyze its return code (0=active, 1=inactive) or output (it outputs "active"/"intactive" as a string).

As an alternative, try the following service (it should run only on reboot, not on a power-off):

[Unit]
Description=Shutdown actions
DefaultDependencies=no
Before=reboot.target
Conflicts=reboot.target

The rest is the same as above

[Service] Type=oneshot RemainAfterExit=true ExecStart=/bin/true ExecStop=/path/to/script

[Install] WantedBy=sysinit.target

Dmitry Grigoryev
  • 27,928
  • 6
  • 53
  • 144