GNU/Linux >> Tutoriels Linux >  >> Linux

Comment exécuter un script avec systemd juste avant l'arrêt ?

La solution suggérée est d'exécuter l'unité de service comme un service normal - regardez le [Install] section. Donc tout doit être pensé à l'envers, les dépendances aussi. Parce que l'ordre d'arrêt est l'ordre de démarrage inverse. C'est pourquoi le script doit être placé en ExecStop= .

La solution suivante fonctionne pour moi :

[Unit]
Description=...

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

[Install]
WantedBy=multi-user.target

RemainAfterExit=true est nécessaire lorsque vous n'avez pas de ExecStart actions.

Après avoir créé le fichier, assurez-vous de systemctl daemon-reload et systemctl enable yourservice --now .

Je viens de le recevoir de systemd IRC, les crédits vont à mezcalero.


  • Pour exécuter un service juste avant de commencer n'importe lequel des services reboot/shutdown/halt/kexec (c'est-à-dire au dernier moment avant que le système de fichiers racine ne soit remonté en lecture seule) utilise cette configuration de service :

    [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
    

    Activez-le avec :

    systemctl enable my_service.service
    
  • Pour exécuter un script juste avant réel reboot/shutdown/halt/kexec (lorsque vous ne pouvez pas écrire sur le système de fichiers racine, car il a été remonté en lecture seule) ajoutez ce script exécutable au /usr/lib/systemd/system-shutdown répertoire.

    Immédiatement avant d'exécuter le système réel, halt/poweroff/reboot/kexec systemd-shutdown exécutera tous les exécutables dans /usr/lib/systemd/system-shutdown/ et leur transmettra un argument :soit "halt", "poweroff", "reboot " ou "kexec", selon l'action choisie. Tous les exécutables de ce répertoire sont exécutés en parallèle et l'exécution de l'action ne se poursuit pas tant que tous les exécutables ne sont pas terminés.

Voir aussi :

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

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


Autant que je sache, cela fait ce dont j'ai besoin (mais je ne sais pas exactement pourquoi).

[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. Linux - Comment exécuter un script avec Systemd juste avant l'arrêt ?

  2. Linux - Comment obtenir moins de Ttys avec Systemd ?

  3. Comment faire fonctionner le script Python en tant que service ?

  4. Comment arrêter le service systemd

  5. Comment obtenir moins de ttys avec Systemd ?

Comment exécuter des conteneurs en tant que service Systemd avec Podman

Comment exécuter un script Shell en tant que service Systemd sous Linux

Comment exécuter des pods en tant que services systemd avec Podman

Comment configurer l'exécution automatique d'un script Python à l'aide de Systemd

Comment exécuter un script Shell en tant que service SystemD sous Linux

Comment exécuter un script bash