Skip to content

arenmegu/mini-cron

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Erraid & Tadmor: Planificateur de tâches

Language Platform License

Projet Système d'Exploitation - L3 Informatique

📖 Description

Erraid & Tadmor est un système complet de planification de tâches (similaire à un Cron) implémenté en C pur, respectant strictement les standards POSIX.

Le projet est conçu autour d'une architecture Client-Serveur robuste utilisant des mécanismes systèmes avancés (Tubes nommés, Multiplexing I/O, Signaux, Gestion de processus) pour garantir performance et fiabilité.

  • Erraid (Le Démon) : Orchestre l'exécution des tâches, gère le temps et surveille les requêtes sans attente active.
  • Tadmor (Le Client) : Interface en ligne de commande (CLI) permettant aux utilisateurs de soumettre, contrôler et auditer les tâches.

🛠️ Installation & Compilation

Le projet ne nécessite aucune dépendance externe hormis la librairie standard C (libc).

Pré-requis

  • Un environnement Linux/Unix.
  • gcc et make.

Compilation

Un Makefile complet est fourni pour automatiser la production.

# Compiler le projet
# Les exécutables sont générés à la racine et dans ./build/
make

Nettoyage

make clean       # Supprime les objets (.o) et le dossier build
make distclean   # Supprime tout (build + exécutables racine + fichiers temporaires)

🚀 Utilisation

1. Démarrer le Serveur (erraid)

Le démon doit être lancé en premier pour écouter les requêtes.

./erraid -F         # Recommandé : Mode avant-plan (logs visibles dans le terminal)
# OU
./erraid &          # Mode Démon (arrière-plan, logs sur disque)
# OU
./erraid -P <DIR>   # Spécifier un dossier de tubes personnalisé

2. Utiliser le Client (tadmor)

A. Création de tâches simples (-c)

# Tâche simple (exécutée chaque minute par défaut)
./tadmor -c echo "Bonjour"

# Tâche planifiée (Minutes, Heures, Jours 0=Dimanche)
./tadmor -m 0,30 -H 8-18 -d 1-5 -c echo "Au boulot"

# Tâche "abstraite" (jamais exécutée auto, utile pour les pipelines)
./tadmor -n -c ls -l

B. Création de tâches complexes (-s, -p, -i)

Combine des IDs de tâches existantes (préalablement créées).

# Séquence (exécute ID 1 puis ID 2)
./tadmor -s <ID1> <ID2>

# Pipeline (stdout de ID 1 -> stdin de ID 2)
./tadmor -p <ID1> <ID2>

# Conditionnelle (SI ID1 réussit ALORS ID2 SINON ID3)
./tadmor -i <ID1> <ID2> <ID3>

C. Consultation et Logs

# Lister toutes les tâches planifiées
./tadmor -l

# Voir la sortie standard (stdout) de la dernière exécution
./tadmor -o <ID>

# Voir la sortie d'erreur (stderr)
./tadmor -e <ID>

# Voir l'historique des codes de retour
./tadmor -x <ID>

D. Administration

# Supprimer une tâche spécifique
./tadmor -r <ID>

# Arrêter proprement le démon erraid (SIGTERM/Cleanup)
./tadmor -q

⚙️ Architecture Technique

Cette section détaille les choix de conception, démontrant la maîtrise des concepts systèmes.

1. Communication & Protocole

  • IPC (Inter-Process Communication) : Utilisation de deux Tubes Nommés (Named Pipes/FIFOs) pour une communication bidirectionnelle synchrone.
  • Sérialisation : Protocole binaire personnalisé "Length-Prefixed". Toutes les données (entiers, structures) sont converties en Big-Endian pour assurer la portabilité de l'architecture.

2. Le Moteur (erraid)

  • Boucle Événementielle (Event Loop) : Utilisation de l'appel système select(). Le serveur ne fait pas d'attente active ("busy waiting"). Il dort jusqu'à ce qu'une requête arrive ou que la prochaine minute soit atteinte.
  • Gestion des Processus :
    • Isolation totale des tâches via fork() et execvp().
    • Prévention des processus Zombies via sigaction(SIGCHLD, SIG_IGN).
    • Mode Démon via setsid() (détachement du terminal).
  • Redirections I/O : Utilisation de dup2() pour capturer STDOUT et STDERR des tâches et les rediriger vers des fichiers de logs.

3. Structures de Données

  • Bitmaps de Temps : L'horaire (minutes/heures/jours) est stocké sous forme de masques binaires (uint64_t) pour des comparaisons bit-à-bit en temps constant O(1).
  • Arbres de Commandes : Structure récursive (struct Command) permettant de représenter des commandes arbitrairement complexes (Séquences, Pipelines, Conditionnelles).

📂 Structure du Projet

.
├── Makefile           # Script de compilation automatisé
├── README.md          # Documentation
├── erraid             # Exécutable Serveur (généré)
├── tadmor             # Exécutable Client (généré)
├── build/             # Fichiers objets intermédiaires (.o)
├── tasks/             # Persistance (Base de données des tâches sur disque)
└── src/
    ├── core/          # Code source (.c)
    │   ├── erraid.c         # Point d'entrée Serveur
    │   ├── tadmor.c         # Point d'entrée Client
    │   ├── tache.c          # Moteur d'exécution (fork/exec/pipe)
    │   ├── command.c        # Sérialisation et structures
    │   ├── api_erraid.c     # Gestionnaire de requêtes serveur
    │   └── ...
    └── include/       # Fichiers d'en-tête (.h)

📄 Licence

Ce projet est distribué sous licence MIT. Vous êtes libre de l'utiliser, le modifier et le distribuer.

About

A robust POSIX-compliant task scheduling system utilizing a client-server architecture with named pipes (FIFO), I/O multiplexing (select), and advanced process management for concurrent job execution.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors