it-swarm-eu.dev

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

Co musím vložit do [install] sekce, takže systemd běží /home/me/so.pl těsně před vypnutím a také před /proc/self/net/dev je zničen?

[Unit]
Description=Log Traffic

[Service]
ExecStart=/home/me/so.pl

[Install]
?
64
sid_com

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 považováno za obrácené, také závislosti. Protože pořadí vypnutí je pořadí zpětného spuštění. Proto musí být skript umístěn do ExecStop=.

Následující řešení pro mě pracuje:

[Unit]
Description=...

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

[Install]
WantedBy=multi-user.target

RemainAfterExit=true je potřeba, pokud nemáte akci ExecStart.

Po vytvoření souboru nezapomeňte systemctl daemon-reload a systemctl enable yourservice --now.

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

76
Matthias

Pokud to 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
8
sid_com
  • Spuštění služby těsně před spuštěním kterékoli ze restartování/vypnutí/zastavení/kexec služeb (tj. V poslední chvíli před tím, než se kořenový souborový systém změní na read-only). 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
    

    Povolit pomocí:

    systemctl enable my_service.service
    
  • Spuštění skriptu těsně před skutečným restartováním/vypnutím/zastavením/kexecem (když nemůžete zapisovat do kořenového souborového systému, protože byl znovu připojen ke čtení) přidejte tento spustitelný skript do /usr/lib/systemd/system-shutdown adresář.

    Bezprostředně před provedením skutečného zastavení systému/vypnutí/restartu/kexecu spustí systémd-shutdown všechny spustitelné soubory v/usr/lib/systemd/system-shutdown/a předá jim jeden argument: buď "zastavit", "vypnout", "restartovat" "nebo" kexec ", v závislosti na vybrané akci. Všechny spustitelné soubory v tomto adresáři jsou spuštěny paralelně a provádění akce nebude pokračovat, dokud nebudou všechny spustitelné soubory dokončeny.

Viz také:

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

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

6
Piotr Jurkiewicz

Nejsem si úplně jistý, ale nemyslím si, že potřebujete část pro instalaci, i když jsem ji explicitně přidal. Také jsem to netestoval, ale myslím, že by vám to mělo pomoci začít:

[Unit]
Description=Log Traffic
Requires=network.target
After=network.target
Before=shutdown.target
DefaultDependencies=no

[Service]
ExecStart=/home/me/so.pl
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=shutdown.target
6
Ulrich Dangel