Forum Programmation.shell Lancer un service systemd par période avec cron

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes : aucune
4
14
oct.
2014

Salut, j'ai crée un script pour lancer un serveur de jeu et j'ai décidé de lui attribuer un service sur systemd. Le tout marche très bien, mais j'aimerais que le service s'exécute et se termine à certaine période, l'idéal serait un démarrage tous les soirs à 20h et une fin à 2h. Comme je n'ai pas l'habitude d'utiliser cron et de mettre en place ce genre de configuration (oui c'est ma première fois), j'aurais besoin de vos conseils. La seule idée que j'ai trouvé se serait de créer un second script pour cron qui s'occuperait de démarrer et tuer le service. Est-ce une bonne approche ? Je me disais qu'il serait peut-être plus judicieux d'utiliser directement mon script avec cron, plutôt que de créer un service.

Le but final, c'est de ne pas consommer des ressources et de la bande passante pour un serveur de jeu que j'utiliserais de temps en temps le soir, je veux aussi permettre aux autres d'en profiter le soir. Oui, c'est une machine branchée à la maison qui me sert d’auto-hébergement pour tous mes services (web, mail, xmpp, etc.), donc je dois faire correctement les choses. D'ailleurs, est-il possible de limiter le charge cpu pour un processus ?

Merci !

Script pour cron :

#!/bin/bash

if [ ! -z "$1" ]; then

        if [ "$1" == "start" ]; then
                systemctl start steam-cmd

        elif [ "$1" == "stop" ]; then
                systemctl stop steam-cmd

        fi

else
        echo "No parameters were specified"

fi
  • # plus simple

    Posté par  . Évalué à 7.

    si tu veux vraiment le faire avec cron

    0 20 * * * systemctl start steam-cmd
    0 2 * * * systemctl stop steam-cmd

    maintenant je ne serais pas surpris qu'il soit possible de dire à systemd de lancer un process à une certaine heure, et de le couper à une autre, sans passer par cron (mais j'ai pas encore systemd sur mes machines)

  • # systemd / timers

    Posté par  . Évalué à 6. Dernière modification le 14 octobre 2014 à 20:10.

    tant qu'à faire du systemd, autant y aller à fond  ;-)

    https://wiki.archlinux.org/index.php/Systemd/Timers

    edit : damned, grillé

    Envoyé depuis mon Archlinux

    • [^] # Re: systemd / timers

      Posté par  (site web personnel) . Évalué à 2.

      J'ai réussi à utiliser le timer, mais il existe un paramètre pour indiquer à systemd quand tuer le service ? Je n'ai rien trouvé dans la documentation…

      • [^] # Re: systemd / timers

        Posté par  . Évalué à 1.

        Essaie de créer 2 timers : un qui démarre le service et un qui l'arrête.

      • [^] # Re: systemd / timers

        Posté par  . É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 !

  • # Limite de charge cpu

    Posté par  . Évalué à 5.

    D'ailleurs, est-il possible de limiter le charge cpu pour un processus ?

    On peut faire ça très simplement :
    cpulimit options prog
    cputool options prog
    nice NN prog

    Pour un sextumvirat ! Zenitram, Tanguy Ortolo, Maclag, xaccrocheur, arnaudus et alenvers présidents !

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.