Gestion de crontab Dynacase

Lorsqu'un module installés dans un contexte Dynacase nécessite de lancer des opérations périodiques, celui-ci peut utiliser le mécanisme de crontab pour spécifier l'ordonnancement de son traitement.

Pour cela, un script d'API `crontab' est disponible :

$ ./wsh.php --api=crontab

wsh --api=crontab --cmd=list [--user=<uid>]
wsh --api=crontab --cmd=<register|unregister> --file=<path/to/cronfile> [--user=<uid>]

Présentation

Le script d'API `crontab' permet d'insérer, modifier ou supprimer des fichiers de crontab dans la crontab de l'utilisateur Apache.

Chaque fichier crontab inséré est marqué avec une ligne de commentaire de début et une ligne de commentaire de fin qui permet par la suite d'identifier la section insérés, et de pouvoir la mettre à jour ou bien de la supprimer.

Exemple d'entrée de sections crontab insérée dans la crontab de l'utilsateur Apache :

# crontab -e -u www-data
MAILTO=admin-dynacase@example.net
PATH=/usr/local/zend/bin:/opt/local/bin:/opt/local/sbin:/usr/X11R6/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/bin

# BEGIN:FREEDOM_CRONTAB:/var/www/dev:FREEDOM/freedom.cron
CONTEXT_ROOT=/var/www/dev
# Every hours
01 * * * * [ -f "$CONTEXT_ROOT"/wsh.php ] && [ ! -f "$CONTEXT_ROOT"/maintenance.lock ] && cd "$CONTEXT_ROOT" && ./wsh.php --api=usercard_refreshgroup > /dev/null
# Every days
02 5 * * * [ -f "$CONTEXT_ROOT"/wsh.php ] && [ ! -f "$CONTEXT_ROOT"/maintenance.lock ] && cd "$CONTEXT_ROOT" && ./wsh.php --api=freedom_clean --real=yes > /dev/null
# Every 5 minutes
*/5 * * * * [ -f "$CONTEXT_ROOT"/wsh.php ] && [ ! -f "$CONTEXT_ROOT"/maintenance.lock ] && cd "$CONTEXT_ROOT" && ./wsh.php --api=fdl_cronexec > /dev/null
# END:FREEDOM_CRONTAB:/var/www/dev:FREEDOM/freedom.cron

# BEGIN:FREEDOM_CRONTAB:/var/www/pre-prod:FREEDOM/freedom.cron
CONTEXT_ROOT=/var/www/pre-prod
# Every hours
01 * * * * [ -f "$CONTEXT_ROOT"/wsh.php ] && [ ! -f "$CONTEXT_ROOT"/maintenance.lock ] && cd "$CONTEXT_ROOT" && ./wsh.php --api=usercard_refreshgroup > /dev/null
# Every days
02 5 * * * [ -f "$CONTEXT_ROOT"/wsh.php ] && [ ! -f "$CONTEXT_ROOT"/maintenance.lock ] && cd "$CONTEXT_ROOT" && ./wsh.php --api=freedom_clean --real=yes > /dev/null
# Every 5 minutes
*/5 * * * * [ -f "$CONTEXT_ROOT"/wsh.php ] && [ ! -f "$CONTEXT_ROOT"/maintenance.lock ] && cd "$CONTEXT_ROOT" && ./wsh.php --api=fdl_cronexec > /dev/null
# END:FREEDOM_CRONTAB:/var/www/pre-prod:FREEDOM/freedom.cron

Dans cet exemple on a donc deux sections de crontab : - une section pour le fichier `FREEDOM/freedom.cron' du contexte `/var/www/dev' - une section pour le fichier `FREEDOM/freedom.cron' du contexte `/var/www/pre-prod'

Le marqeur de début est : “BEGIN:FREEDOM_CRONTAB:<context_root>:<crontab_file>” Le marqeur de fin est : “END:FREEDOM_CRONTAB:<context_root>:<crontab_file>”

Utilisation

Insérer un fichier crontab pour le contexte

$ ./wiff context pre-prod exec ./wsh.php --api=crontab --cmd=register --file=MON_APP/ma_crontab.cron

Résultat :

# crontab -e -u www-data
[...]
# BEGIN:FREEDOM_CRONTAB:/var/www/pre-prod:MON_APP/ma_crontab.cron
CONTEXT_ROOT=/var/www/pre-prod
*/5 * * * * [ ! -f "$CONTEXT_ROOT"/maintenance.lock ] && cd "$CONTEXT_ROOT" && echo "Il est $(date +\%H:\%M)" | logger -t horloge
# END:FREEDOM_CRONTAB:/var/www/pre-prod:MON_APP/ma_crontab.cron

Mettre à jour une section crontab du contexte

Pour mettre à jour une section il suffit de faire un “register” du fichier crontab : si la section existe alors elle sera mise-à-jour.

$ ./wiff context pre-prod exec ./wsh.php --api=crontab --cmd=register --file=MON_APP/ma_crontab.cron

Supprimer une section crontab du contexte

$ ./wiff context pre-prod exec ./wsh.php --api=crontab --cmd=unregister --file=MON_APP/ma_crontab.cron

Lister les sections crontab du contexte

$ ./wiff context pre-prod exec ./wsh.php --api=crontab --cmd=list
freedom_3/manex/crontab.txt · Dernière modification: 13/04/2011 09:11 par jerome.auge