cron
Description
Makefile
C
Projet de L3 Informatique â UE Système
PrĂŠsentation
erraid est un système de planification et dâexĂŠcution de tâches, inspirĂŠ des mĂŠcanismes de type cron, permettant : ⢠la crĂŠation de tâches simples ⢠la combinaison de tâches (sĂŠquence, pipeline, conditionnelle) ⢠lâexĂŠcution planifiĂŠe selon un calendrier ⢠la consultation des sorties standard, erreurs et codes de retour
Le projet repose sur une architecture client / dĂŠmon / scheduler, communiquant via des tubes nommĂŠs (FIFO).
Architecture gĂŠnĂŠrale
Le projet est composĂŠ de trois grandes parties :
1ď¸âŁ Client (tadmor) ⢠Interface en ligne de commande ⢠Envoie des requĂŞtes au dĂŠmon via des pipes ⢠Permet : ⢠crĂŠer une tâche ⢠lister les tâches ⢠supprimer une tâche ⢠afficher stdout / stderr / historique dâexĂŠcution
2ď¸âŁ DĂŠmon (erraid) ⢠Processus principal ⢠Gère : ⢠les requĂŞtes entrantes ⢠le stockage des tâches ⢠la communication avec le scheduler ⢠Fonctionne en mode dĂŠmon (optionnel)
3ď¸âŁ Scheduler ⢠Processus fils du dĂŠmon ⢠VĂŠrifie pĂŠriodiquement le calendrier ⢠Lance les tâches au moment appropriĂŠ ⢠Enregistre : ⢠stdout ⢠stderr ⢠dates et codes de retour
. âââ ARCHITECTURE.md âââ AUTHORS.md âââ include â  âââ erraid.h â  âââ exec.h â  âââ logger.h â  âââ protocol.h â  âââ scheduler.h â  âââ serialisation.h â  âââ tadmor.h â  âââ types.h â  âââ utils.h âââ Makefile âââ README.md âââ src âââ erraid.c âââ exec.c âââ logger.c âââ main.c âââ scheduler.c âââ serialisation.c âââ tadmor.c âââ types.c âââ utils.c
Modèle de donnÊes
task
Une tâche est composÊe de : ⢠un identifiant unique ⢠un calendrier (timing) ⢠une commande (command)
typedef struct task { uint16_t id; timing timing; command *cmd; } task;
command
Les commandes sont reprĂŠsentĂŠes sous forme dâarbre, permettant la composition.
Types possibles : ⢠SI : commande simple ⢠SQ : sÊquence ⢠PL : pipeline ⢠IF : conditionnelle
typedef struct command { uint16_t type; union { simple_command simple; sequence_command sequence; pipeline_command pipeline; if_command if_cmd; }; } command;
Commande conditionnelle (IF)
Une commande conditionnelle reprĂŠsente lâĂŠquivalent de :
if CMD_1 ; then CMD_2 ; else CMD_3 ; fi
Structure associĂŠe :
typedef struct { uint32_t cond_count; command **cond;
uint32_t then_count; command **then_cmd;
uint32_t else_count; command **else_cmd; } if_command;
Communication
La communication client â dĂŠmon se fait via : ⢠erraid-request-pipe ⢠erraid-reply-pipe
Les messages sont sĂŠrialisĂŠs en big-endian.
Exemples dâutilisation
CrÊer une tâche simple
tadmor -c -m 10 echo "Hello"
CrĂŠer une sĂŠquence
tadmor -s 1 2 3
CrĂŠer une commande conditionnelle
tadmor -i 1 2 3
Compilation
make
Auteurs
⢠BELKACEMI Abderrahim
⢠GRITAR Georgel
⢠THIAM Adama