Utilisation des temporisateurs Systemd en remplacement des tâches Cron

Utilisation des temporisateurs Systemd en remplacement des tâches Cron
Photographie d'une femme tenant un réveil devant un ordinateur portable.

En tant qu’utilisateur Linux, vous connaissez probablement cron. Il a fonctionné comme planificateur de tâches basé sur le temps Unix pendant de nombreuses années. Aujourd’hui, de nombreux utilisateurs utilisent les minuteurs Systemd pour remplacer la domination de cron. Cet article abordera les bases de la configuration de votre propre minuteur systemd et de la vérification de son bon fonctionnement sur votre système.

Pourquoi utiliser les temporisateurs Systemd plutôt que Cron ?

L’un des principaux arguments de vente des temporisateurs Systemd est qu’ils sont entièrement intégrés à l’écosystème Systemd. Cela signifie qu’il est très facile de planifier et de lier différentes unités de service Systemd entre elles, ce qui facilite l’automatisation des tâches par rapport à un démon cron traditionnel.

Un terminal affichant un service système utilisant un minuteur Systemd.

Un autre avantage des temporisateurs Systemd par rapport à Cron est qu’ils offrent un contrôle plus détaillé sur la manière de déclencher vos tâches planifiées. Par exemple, les temporisateurs Systemd ont une OnBootSecvariable qui vous permet de retarder votre unité de service jusqu’à ce qu’un certain laps de temps se soit écoulé après un démarrage réussi.

Un terminal montrant un exemple de configuration de minuterie avec une variable de déclenchement spéciale.

Enfin, les temporisateurs Systemd sont également incroyablement précis par rapport à un démon cron standard. Par défaut, il peut suivre et exécuter des tâches jusqu’à une microseconde à l’aide de sa AccuracySecvariable. Cela est incroyablement utile si vous utilisez un ordinateur qui nécessite des timings exacts pour ses tâches planifiées.

Installation des temporisateurs Systemd

Les temporisateurs sont une fonction intégrée de Systemd. Cela signifie que si vous utilisez Systemd comme démon d’initialisation, comme c’est le cas avec les distributions Linux populaires telles qu’Arch, Fedora et Ubuntu, votre machine bénéficie déjà de cette fonctionnalité sur certains de ses processus système.

Pour vérifier si votre distribution exécute Systemd, vous pouvez exécuter la commande suivante :

Cela répertoriera toutes les unités, périphériques et minuteries Systemd actuellement en cours d’exécution sur votre système.

Un terminal affichant la sortie de la commande systemctl sur une distribution Linux basée sur Systemd.

Lister les minuteries existantes

Le moyen le plus simple de vérifier si un minuteur est en cours d’exécution sur votre compte utilisateur actuel est d’utiliser la commande suivante :

Vous pouvez également utiliser l’ --allindicateur pour vérifier chaque minuteur du système, y compris ceux inactifs :

Cela imprimera la date et l’heure d’activation de chaque minuterie, le compte à rebours jusqu’à ce point, le temps écoulé depuis la dernière exécution, le nom de l’unité de la minuterie elle-même et le service que chaque unité de minuterie active.

Un terminal répertoriant tous les temporisateurs Systemd en cours d'exécution dans la session en cours.

Créer un nouveau service et une minuterie

La première étape de la création d’un minuteur Systemd consiste à créer ou à rechercher un service existant auquel l’attacher. En effet, chaque minuteur doit être attaché à une unité de service parent. Cette section vous guidera tout au long du processus de création d’un minuteur pour un service Systemd personnalisé.

Commencez par créer les fichiers vierges « .service » et « .timer » dans votre répertoire personnel :

Ouvrez votre nouveau fichier de service à l’aide de votre éditeur de texte préféré :

Collez le modèle suivant dans votre nouveau fichier de service :

Enregistrez votre fichier « .service », puis ouvrez votre fichier « .timer » vierge en utilisant le même éditeur de texte :

Collez le bloc de code suivant dans votre fichier de minuterie :

Accédez à la [Timer]section, puis remplacez la valeur de la OnCalendarvariable par la date et l’heure auxquelles vous souhaitez que votre unité Systemd s’exécute. Dans mon cas, je souhaite que mon programme s’exécute exactement à 11h43 tous les jours.

Un terminal mettant en évidence la valeur du minuteur personnalisé pour la variable OnCalendar.

Créer un minuteur monotone

Outre la possibilité de définir un minuteur qui s’exécute à une date précise, il est également possible de créer un minuteur monotone qui s’exécute en fonction du temps de fonctionnement actuel de votre ordinateur. Cela est utile si vous planifiez une tâche sur une machine qui ne fonctionne pas en permanence, comme sur un ordinateur de bureau ou un ordinateur portable.

Pour commencer, ouvrez votre fichier « .timer », puis faites défiler jusqu’à la [Timer]section.

Un terminal mettant en évidence l'emplacement de l'

Supprimez les variables OnCalendaret Persistent, puis ajoutez OnBootSecsuivi d’un intervalle de temps pour l’exécution de votre fichier d’unité. Par exemple, le définir sur « 1 h » indiquera à Systemd de lancer votre commande une heure après le démarrage réussi de votre ordinateur.

Un terminal mettant en évidence la variable OnBootSec remplaçant les variables de temporisation d'origine du fichier de temporisation personnalisé.

Ajoutez la OnUnitActiveSecvariable juste en dessous OnBootSec, puis indiquez l’intervalle pendant lequel vous souhaitez que votre minuteur s’exécute en continu après le démarrage de votre système. Dans mon cas, je le définirai sur « 30 min » car je souhaite que ma tâche s’exécute toutes les 30 minutes après son exécution initiale.

Un terminal mettant en évidence la variable OnUnitActiveSec qui convertit le minuteur à exécution unique en un minuteur monotone.

Création d’un temporisateur transitoire

L’un des avantages de l’intégration profonde de Systemd Timer dans Systemd est qu’il peut tirer parti des autres programmes adjacents du démon init. Par exemple, il est possible d’utiliser des temporisateurs avec Systemd-run pour créer des tâches transitoires ponctuelles sur votre machine.

Pour créer un minuteur temporaire simple, collez la ligne de code suivante dans une session de terminal, puis remplacez la valeur de la --on-calendarvariable par l’intervalle pendant lequel vous souhaitez que votre commande s’exécute :

Ajoutez la commande que vous souhaitez exécuter à la fin de la ligne, puis appuyez Enterpour la programmer.

Vous pouvez également créer des minuteries monotones temporaires en utilisant à la fois les variables --on-bootet --on-unit-active:

Confirmez que votre minuteur temporaire est désormais mis en file d’attente sur le planificateur de tâches de Systemd en exécutant la commande suivante :

Un terminal affichant l'état d'un temporisateur transitoire chargé dans le système.

Exécution du minuteur Systemd

Pour exécuter votre nouveau minuteur Systemd, vous devez vous assurer qu’il est correctement chargé sur votre session Systemd actuelle. Pour cela, copiez votre service personnalisé et votre fichier de minuteur dans le répertoire de services de votre Systemd :

Rechargez la configuration actuelle du démon init :

Activez à la fois le service et le minuteur que vous avez créés en utilisantsystemctl :

Vérifiez si vous avez correctement chargé votre nouveau minuteur en exécutant : sudo systemctl status my-new-timer.timersur une nouvelle session de terminal. Dans ce cas, vous pouvez voir que mon minuteur est maintenant planifié et préparé pour que le système s’exécute.

Un terminal affichant le fichier de minuterie en cours d'exécution dans le système actuel.

Apprendre à planifier des tâches à l’aide des temporisateurs Systemd n’est qu’une partie de la compréhension du fonctionnement de votre machine Linux. Plongez plus profondément dans les rouages ​​de ce merveilleux système d’exploitation en consultant notre article comparatif sur Grub et Systemd-boot.

Crédit photo : Alexandr Podvalny via Unsplash . Toutes les modifications et captures d’écran par Ramces Red.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *