<div dir="ltr">I finally found a way to make it work *once* but unless there is a wildcard mechanism in systemd or similar I am not sure how to make it work across several reboots.  <br><br><div>So I am trying to run this script in a kubernetes node which manages containers using crio and systemd (see <a href="https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/">https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/</a>). Basically every container is tracked with a crio-*.scope. Scope names are random. The crio-*.scope are started by slices but in my tests the parent slice does not change the shutdown order of its childrens.</div><div>I'd like to run my script before any of these scopes (containers) are stopped.</div><div>So I did a test listing every crio-*.scope present in the cluster in the After= directive and it worked ! My script was reordered to run before any scopes/containers could be stopped by systemd.<br> [Unit]<br>After=crio-021c01dd1629e3571606b9398bf30734ffd1aa0dd621c8dde779b3017fedcae7.scope crio-02613e7b303f3a49c129d859605f9a1c1c1fde6f7f0d2a764c4604fb4e436df5.scope <br>... + many lines<br>crio-dc592c6ac726c20ce4a46cebe0807574579de30b97bc75a9be057e5df0eb4e19.scope crio-dda82b33e6f48b47cff898d62aefdf556c9f0d8b958babe608ef4989e6400340.scope <br><br>[Service]<br>Type=oneshot<br>RemainAfterExit=true<br>ExecStop=/usr/local/bin/myscript.sh<br><br>[Install]<br>WantedBy=multi-user.target<br><br>Is there a way to use wildcards in After= like After=*.scope or something equivalent. I cannot hardcode the .scope names because they are random.<br><br>Thanks!</div><div>David<br><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Dec 9, 2024 at 8:27 AM David Elie-Dit-Cosaque <<a href="mailto:deliedit@redhat.com" target="_blank">deliedit@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi Dan and Andrei, thanks a lot  for the explanation and code snippets, I try it out.<div><br></div><div>Thanks,</div><div>David.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Dec 8, 2024 at 10:13 AM Dan Nicholson <<a href="mailto:dbn@endlessos.org" target="_blank">dbn@endlessos.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Fri, Dec 6, 2024 at 3:16 PM David Elie-Dit-Cosaque<br>
<<a href="mailto:deliedit@redhat.com" target="_blank">deliedit@redhat.com</a>> wrote:<br>
><br>
> Hi All,<br>
><br>
> I am trying to create a systemd service that would execute a script at shutdown before any other services start receiving shutdown notifications. I came up with this:<br>
><br>
> [Service]<br>
> Type=oneshot<br>
> RemainAfterExit=true<br>
> ExecStart=/usr/bin/true<br>
> ExecStop=/usr/local/bin/myscript.sh<br>
> [Install]<br>
> WantedBy=multi-user.target<br>
><br>
> The script does run after shutdown is initiated but since it relies on other services which are also shutting down, it fails. Is there a way to order the shutdown so that  myscript.sh is completed first before continuing with the shutdown?<br>
<br>
When stopping units, systemd reverses the ordering. For example, if<br>
you have a service that has After=ssh.service, then the service is<br>
started after ssh.service and stopped before it.<br>
<br>
So, you just need to add After for any services or targets that you<br>
care about even if you don't have ExecStart. Here's an example of a<br>
service that runs on shutdown that does nothing when starting -<br>
<a href="https://github.com/ostreedev/ostree/blob/main/src/boot/ostree-finalize-staged.service" rel="noreferrer" target="_blank">https://github.com/ostreedev/ostree/blob/main/src/boot/ostree-finalize-staged.service</a>.<br>
<br>
---<br>
Dan<br>
<br>
</blockquote></div>
</blockquote></div>