On Mi, 16.01.19 12:40, Christopher Cox (ccox@xxxxxxxxxxxxxx) wrote: > I need to be able to execute a script before anything gets shutdown. That > is, when somebody does a "reboot", "shutdown" or "poweroff", I need this > script to run first, and for it to finish before everything gets > whacked. Well, systemd doesn't know a concept of "before all" and "after all", as a unit marked that way would have to be the only one, and what do you do if multiple units are marked that way? Hence, systemd generally allows you to order units after or before specific other units, but there are no absolutes like "after all" or "before all". If you want to define a unit that runs code during shutdown the best approach is to make it a unit that gets started at boot, and then only uses ExecStop= (but not necessarily ExecStart=). Note that the shutdown order of units is generally the inverse of the startup order. Hence if you want unit A to stop before unit B, then you have to declare in A "After=B", so that A gets started *after* unit B, and thus stopped before B, as you need it here. Usually a system boots into multi-user.target or graphical.target (or generically default.target), and these are the last (or close to last) units that are reached. Due to the rule of "stop order is inverted start order" this also means these targets are the first ones to be stopped again when the system goes down. With that you can now put together a unit that is terminated relatively early on during shutdown: just make it "After=multi-user.target graphical.target default.target", so that it gets activated at boot very late, and thus deactivated at shutdown very early. > [Unit] > Description=my-service save status > DefaultDependencies=no No need to turn off default dependencies. > Before=reboot.target shutdown.target > Conflicts=reboot.target shutdown.target These two lines are unnecessary. > [Service] > Type=oneshot > RemainAfterExit=yes > ExecStart=/bin/true This line is unnecessary on any remotely recent systemd version. > ExecStop=/usr/local/bin/my-service.sh save > StandardOutput=journal This line is redundant, as it is the implied default. > [Install] > WantedBy=multi-user.target Lennart -- Lennart Poettering, Red Hat _______________________________________________ systemd-devel mailing list systemd-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/systemd-devel