Le but de cette partie est de créer un service permettant de supprimer une fois par jour tout ce qui est contenu dans un dossier tmp dans le home.
Pour commencer on se met dans le home et on crée un répertoire tmp
et créer des fichiers dans ce repertoire qui vont nous servir tout le long.
cd
mkdir tmp
cd tmp/
touch a b c
On a maintenant un dossier tmp
qui contient 3 fichiers a
, b
et c
.
Pour créer le service, on crée un fichier supp_tmp.service
que on va mettre dans /etc/systemd/system/
qui contient ceci :
/etc/systemd/system/supp_tmp.service
[Unit]
Description=Delete all files in the tmp directory
[Service]
Type=oneshot
ExecStart=rm -r /home/[votre username]/tmp/*
[Install]
WantedBy=timers.target
Regardons plus en détail :
[Unit]
: Décrit le service et son butDescription
: La desciption du service[Service]
: Contient les paramètres qui définissent comment le service s'exécuteType
: Comment il gère son processus. oneshot signifie que le service exécute une seule commande et s'arrête immédiatement après. Par défaut, le service tourne en arrière plan et est considéré comme actif dès que le processus est lancéExecStart
: Obligatoire dans chaque service: ce qu'exécute le programme[Install]
et WantedBy
: Utilisé plus tard pour le lancer le programme avec un timerPour lancer le programme il suffit alors de faire la commande suivante:
sudo systemctl start supp_tmp.service
Oh ! Une erreur ! Comment savoir ce qui ne fonctionne pas ?
Il suffit de lancer de regarder les logs avec journalctl
:
sudo journalctl -xeu supp_tmp.service
Tips : Faire
sudo systemctl status supp_tmp.service
nous donne aussi les premières lignes du journal.
On doit alors voir une ligne d'erreur :
date heure nom-de-votre-machine rm[106086]: rm: impossible de supprimer '/home/[votre username]/tmp/*': Aucun fichier ou dossier de ce type
Que s'est-il passé ? Contrairement au bash, systemctl n'a pas de shell et n'interpète alors pas le *
et comme le fichier *
n'existe pas, il renvoie alors cette erreur.
On peut alors corriger le problème en remplacant la ligne dans /etc/systemd/system/supp_tmp.service
par :
ExecStart=/bin/sh -c 'rm -r /home/tristan/tmp/*'
Comme la commande est executé dans un shell, il ne doit plus avoir d'erreur. Pour que les modifications soient prises en compte il faut alors faire la commande :
sudo systemctl daemon-reload
Et on relance la commande sudo systemctl start supp_tmp.service
et on vérifie que les fichiers ont bien été supprimés avec un ls
On veut maintenant que ce service se lance tous les jours à une certaine heure. Pour pouvoir le tester, recréer des fichiers dans le dossier tmp
.
Pour créer le service, on crée un fichier supp_tmp.timer
que on va mettre dans /etc/systemd/system/
qui contient ceci :
/etc/systemd/system/supp_tmp.timer
[Unit]
Description=Daily removal of the tmp directory in the home folder
[Timer]
OnCalendar=*-*-* 22:54 #Remplacez l'heure par celle que vous souhaitez
Persistent=true
[Install]
WantedBy=timers.target
Regardons plus en détail :
[Timer]
: Définit les règles de déclenchement du timer.OnCalendar
: Spécifie quand le timer doit s’exécuter. --* signifie tous les jours (année-mois-jour, mais les * signifient "n'importe quelle valeur"). Le timer s'executera tous les jours à 22h54Persistent
: Garantit que la tâche est exécutée même si le système était éteint au moment prévu.WantedBy=timers.target
: indique que ce timer doit être démarré automatiquement lorsque timers.target (la cible systemd des timers) est activée.On peut alors le lancer avec :
sudo systemctl start supp_tmp.timer
Il suffit alors d'attendre l'heure voulue et de regarder si les fichiers sont alors bien supprimées.
Si vous voulez mettre un autre horaire, exécutez les lignes suivantes après avoir fait les modifications dans le fichier:
sudo systemctl daemon-reload
sudo systemctl restart supp_tmp.timer
Il faut arrêter les services avant de pouvoir les supprimer.
sudo systemctl stop supp_tmp.timer
sudo rm etc/systemd/system/supp_tmp.service etc/systemd/system/supp_tmp.timer