Linux : Les Cronjobs (Fainéantise)

Linux
635 mots

Introduction

Bah on va voir ce que c'est les cronjobs et comment en ajouter ducoup mdr

Définiton

Le terme Cronjobs n'est pas spécifique à Linux c'est un terme utilisé pour l'automatisation de tâche à intervalle régulier. En gros quand tu crée un cronjob tu fais une tâche (Exécuter un programme, Générer une notification, etc...) qui va se répéter sur un intervalle de temps défini

Les cronjobs sur Linux sont ajoutés à la crontab et sont exécutés par le service système cron.

Gestion de Cron

1. Fichier Crontab de l'utilisateur

Chaque utilisateur peut définir ses propres tâches cron dans un fichier dédié, accessible via la commande :

crontab -e # e pour edit

Ce fichier est généralement stocké à l'emplacement :

/var/spool/cron/crontabs/<nom_utilisateur>  # Sur Debian, Ubuntu
/var/spool/cron/<nom_utilisateur>          # Sur RedHat, CentOS

2. Fichiers Crontab globaux

Les administrateurs système peuvent définir des tâches planifiées au niveau global dans les fichiers suivants :

  • /etc/crontab : Contient des tâches système et permet de spécifier un utilisateur pour chaque tâche.
  • /etc/cron.d/ : Contient des fichiers de configuration cron spécifiques à certaines applications ou services.

3. Répertoires spécifiques pour les tâches automatiques

De nombreux systèmes Linux utilisent les répertoires suivants pour exécuter des scripts à des fréquences prédéfinies :

  • /etc/cron.hourly/ → Exécution toutes les heures
  • /etc/cron.daily/ → Exécution une fois par jour
  • /etc/cron.weekly/ → Exécution une fois par semaine
  • /etc/cron.monthly/ → Exécution une fois par mois

Le Service Cron

Pour vérifier si le service cron est actif :

systemctl status cron    # Sur Debian, Ubuntu
systemctl status crond   # Sur RedHat, CentOS

5. Les Logs des cronjobs

Les logs des tâches cron sont souvent stockés dans :

  • /var/log/syslog (Debian, Ubuntu) → Recherche avec grep CRON /var/log/syslog
  • /var/log/cron (RedHat, CentOS) → Recherche avec grep CRON /var/log/cron

Cela permet de vérifier si une tâche cron a bien été exécutée.

Création de Cronjobs

On va le faire sur Debian.

Comment Écrire un Cronjob

* * * * *
│ │ │ │ │
│ │ │ │ └─ Jour de la semaine (0-7, 0 et 7 = dimanche)
│ │ │ └─── Mois (1-12)
│ │ └───── Jour du mois (1-31)
│ └─────── Heure (0-23)
└───────── Minute (0-59)

Ca se scinde en 3 Parties :

            • : Chaque étoiles correspond à une unité de temps allant de Minute à Années
  • /path/to/executer : Le programme qui va exécuter le script tout les x temps, (Exemple : /usr/bin/python)
  • /path/to/executable : Le script qui va être exécuté tout les x temps par l'éxécutant (Exemple : /home/username/script.py)

Exemples de cronjobs :

  • Exécuter un script toutes les 5 minutes
*/5 * * * * /chemin/vers/script.sh
  • Exécuter un script toutes les heures
0 * * * * /chemin/vers/script.sh
  • Exécuter un script tous les 2 jours
0 0 */2 * * /chemin/vers/script.sh
  • Exécuter un script une fois par mois
0 0 1 * * /chemin/vers/script.sh

Exécuter un script Python toutes les 5 Minutes

Voici un script Python pour logger l'utilisation du CPU & RAM, créez le dans /home/username/mescouilles.py:

import psutil
import datetime

LOG_FILE = "/var/log/system_monitor.log"

def log_system_usage():
    timestamp = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    cpu_usage = psutil.cpu_percent(interval=1)
    memory_info = psutil.virtual_memory()
    log_entry = f"[{timestamp}] CPU: {cpu_usage}% | RAM: {memory_info.percent}%\n"
    
    with open(LOG_FILE, "a") as log_file:
        log_file.write(log_entry)

if __name__ == "__main__":
    log_system_usage()

Notre script étant fait, on peut automatiser le logging grâce à un cronjob :

*/5 * * * * /usr/bin/python /path /home/username/mescouilles.py

Et voilà c'est terminé y'avais rien de compliqué hein

Créer une Notification à 10h du Matin tous les jours

Debian possède un large panel de programme développé par des tiers et l'un d'entre eux est Zenity qui est plutôt cool pour l'affichage des notifications. Installez le sudo apt update && sudo apt install zenity

Puis définissez votre nouveau cronjob (plus complexe celui-ci):

0 10 * * * DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus zenity --notification --text="T'es qu'une merde Jhonny"
  • DISPLAY=:0 est utilisé pour définir l'écran sur lequel afficher la notification
  • DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus permet d'envoyer la notification à l'utilisateur actif (toi ducoup).
  • zenity --notification --text="T'es qu'une merde Jhonny"* est le programme a exécuter (pas besoin de spécifier le chemin complet ici parceque zenity est dans le PATH dès son installation)

Conclusion

Voilà vous savez un peu tout sur les cronjobs linux désormais bravo d'avoir lu jusqu'ici.

Si certains d'entre vous ont du savoir à transmettre et souhaitent le monnayer (ou non psk vous êtes cool) vous pouvez le faire savoir dans le Formulaire De Demande Formateur.