====== shutdown ====== ===== reduce reboot/shutdown timeout ===== systemctl edit reboot.target systemctl edit soft-reboot.target systemctl edit ctrl-alt-del.target systemctl edit poweroff.target and change [Unit] JobTimeoutSec=30min or use unit override files. ===== run service at shutdown ===== ==== run service very late ==== **Drawbacks:** If service is scheduled before shutdown.target it is started too late for some complex operation. Almost all services are stopped, tmpfs are unmounted and filesystems are remounted RO. [Unit] Description=Disable power output DefaultDependencies=no After=enable-power.service another-enable-power.service Conflicts=enable-power.service another-enable-power.service Before=shutdown.target reboot.target halt.target kexec.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/power_control disable [Install] WantedBy=shutdown.target WantedBy=reboot.target WantedBy=halt.target WantedBy=kexec.target ==== run service in reverse order ==== Trick is to provide service without ''ExecStart='' action only to provide correct ordering for ''ExecStop='' action. From ''systemd.unit'' doc: When two units with an ordering dependency between them are shut down, the inverse of the start-up order is applied Most importantly, for service units start-up is considered completed for the purpose of Before=/After= when all its configured start-up commands have been invoked and they either failed or reported start-up success [Unit] Description=Disable power output DefaultDependencies=no # Shedule it BEFORE to run ExecStop AFTER during shutdown Before=enable-power.service # Want to run ExecStop after eley-device is stopped Before=another-enable-power.service Before=basic.target After=sysinit.target local-fs.target Before=shutdown.target reboot.target halt.target kexec.target Conflicts=shutdown.target reboot.target halt.target kexec.target [Service] Type=oneshot RemainAfterExit=yes ExecStop=/bin/power_control disable ExecStop=/bin/true [Install] WantedBy=basic.target