• [^] # Re: systemd / timers

    Posté par . En réponse au message Lancer un service systemd par période avec cron. Évalué à 1.

    J'ai buté sur le même problème : on peut démarrer un service avec un timer, mais peut-on arrêter un service avec un timer ? Il semblerait que non.

    Je m'en suis sorti en créant un second timer, qui lançait un service incompatible avec le premier service.


    Création d'un timer pour lancer le service steam-cmd.service :

    $ cat /etc/systemd/system/steam-cmd.timer

    [Unit]
    Description=Timer pour lancer steam-cmd.service
    [Timer]
    OnCalendar=*-*-* 20:00:00
    AccuracySec=1s
    [Install]
    WantedBy=multi-user.target

    Ce timer lancera steam-cmd.service à 20h.


    Création du service stop-steam-cmd.service, incompatible avec steam-cmd.service :

    $ cat /etc/systemd/system/stop-steam-cmd.service

    [Unit]
    Conflicts=steam-cmd.service
    Description=stop-steam-cmd.service est en conflit avec steam-cmd.service
    [Service]
    ExecStart=/usr/bin/echo "Activation de stop-steam-cmd.service"
    Type=oneshot

    Le lancement de stop-steam-cmd.service va arrêter (« Conflicts ») steam-cmd.service.


    Création d'un timer pour lancer le service stop-steam-cmd.service :

    $ cat /etc/systemd/system/stop-steam-cmd.timer

    [Unit]
    Description=Timer pour lancer le service stop-team-cmd.service
    [Timer]
    OnCalendar=*-*-* 02:00:00
    AccuracySec=1s
    [Install]
    WantedBy=multi-user.target 

    Ce timer lancera stop-steam-cmd.service à 2h.


    On valide nos modifications :

    $ systemctl daemon-reload

    Il ne reste qu'à lancer nos deux timers :

    $ systemctl start steam-cmd.timer stop-steam-cmd.timer

    et à automatiser leur lancement au démarrage de l'ordinateur :

    $ systemctl enable steam-cmd.timer stop-steam-cmd.timer


    Ça fait beaucoup de choses pour automatiser le lancement et l'extinction d'un service :-) Pour cet exemple, cron est peut-être plus pertinent que les timers de systemd !