GNU/Linux >> Znalost Linux >  >> Linux

Jak spustit skript s systemd těsně před vypnutím?

Navrhovaným řešením je spustit servisní jednotku jako normální službu - podívejte se na [Install] sekce. Takže všechno musí být myšleno obráceně, závislosti také. Protože pořadí vypnutí je obrácené pořadí spouštění. Proto musí být skript umístěn v ExecStop= .

Následující řešení mi vyhovuje:

[Unit]
Description=...

[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=<your script/program>

[Install]
WantedBy=multi-user.target

RemainAfterExit=true je potřeba, když nemáte ExecStart akce.

Po vytvoření souboru se ujistěte, že systemctl daemon-reload a systemctl enable yourservice --now .

Právě jsem to dostal od systemd IRC, kredity jdou do mezcalera.


  • Spuštění služby těsně před spuštěním kterákoli ze služeb reboot/shutdown/halt/kexec (tj. v poslední chvíli před opětovným připojením kořenového souborového systému pouze pro čtení) použijte tuto konfiguraci služby:

    [Unit]
    Description=Save system clock on shutdown
    DefaultDependencies=no
    After=final.target
    
    [Service]
    Type=oneshot
    ExecStart=/usr/lib/systemd/scripts/fake-hwclock.sh save
    
    [Install]
    WantedBy=final.target
    

    Povolte jej pomocí:

    systemctl enable my_service.service
    
  • Chcete-li spustit skript těsně před skutečným reboot/shutdown/halt/kexec (když nemůžete zapisovat do kořenového souborového systému, protože byl znovu připojen pouze pro čtení) přidejte tento spustitelný skript do /usr/lib/systemd/system-shutdown adresář.

    Bezprostředně před provedením samotného systému halt/poweroff/reboot/kexec systemd-shutdown spustí všechny spustitelné soubory v /usr/lib/systemd/system-shutdown/ a předá jim jeden argument:buď "halt", "poweroff", "reboot" " nebo "kexec", v závislosti na zvolené akci. Všechny spustitelné soubory v tomto adresáři jsou spouštěny paralelně a provádění akce nepokračuje, dokud nejsou dokončeny všechny spustitelné soubory.

Viz také:

https://www.freedesktop.org/software/systemd/man/bootup.html

https://www.freedesktop.org/software/systemd/man/systemd-halt.service.html


Pokud vidím, dělá to, co potřebuji (ale nevím přesně proč).

[Unit]
Description=Log Traffic
DefaultDependencies=no
Before=shutdown.target reboot.target halt.target


[Service]
ExecStart=/usr/local/bin/perl /home/me/log_traffic.pl --stop
Type=oneshot

Linux
  1. Jak napsat spouštěcí skript pro Systemd?

  2. Jak zastavit službu systemd

  3. Jak spustit část skriptu se sníženými oprávněními?

  1. Jak spravovat služby Systemd pomocí Systemctl v systému Linux

  2. Linux – Jak spustit skript pomocí Systemd těsně před vypnutím?

  3. Linux – jak získat méně Ttys s Systemd?

  1. Jak nakonfigurovat Systemd tak, aby jednoduchý skript pomocí Standardio převedl do síťové služby?

  2. Jak zajistit, aby skript Python běžel jako služba?

  3. Jak spustím skript před vším ostatním při vypnutí pomocí systemd?