Comment utiliser Anacron pour planifier des tâches sur un Hébergement Web Gandi

Gandi Hébergement Web n’inclut pas le planificateur Unix/Linux standard, cron. Cependant, il y a un outil puissant que vous pouvez utiliser à cette fin : anacron.

Concept

L’idée est simple : Décidez quelle commande ou programme (job) vous voulez exécuter périodiquement, et à quel intervalle. Mettez une entrée dans le fichier de configuration pour définir la tâche et l’intervalle. Le job sera exécuté à l’intervalle défini.

Chaque job peut avoir son propre intervalle.

Note

Nous avons modifié la version standard d’anacron, pour réduire l’intervalle minimum et donner plus de flexibilité à nos clients. L’intervalle le plus petit que vous pouvez régler est maintenant d’une heure.

Attention

Les tâches Cron (et anacron) comptent dans le calcul des processus. Cela signifie que sur un hébergement de taille S, qui n’a que 2 processus qui peuvent s’exécuter simultanément, le travail cron va occuper l’un de ces processus. Vous pouvez verrouiller votre instance si vous exécutez trop de jobs cron en même temps, ou en même temps que d’autres processus concurrents. Si vous avez besoin d’un grand nombre de travaux cron, considérez une taille M ou un hébergement plus grande.

Configurer

Pour configurer anacron, vous devez éditer le fichier anacrontab. Il n’y a qu’un seul fichier anacrontab par Hébergement Web Gandi, accessible via le Panneau de Contrôle, SFTP et la Console d’urgence :

Pour modifier le fichier depuis le Panneau de Contrôle

Rendez-vous sur la gestion de l’instance, puis « Administration » et cliquez sur le lien d’accès à votre Panneau de contrôle. Une fois sur celui-ci allez dans la rubrique Cron et cliquez sur « Edit scheduled tasks ».

Console d’urgence

Connectez-vous à la console d’urgence (sous la rubrique « Administration ») de votre instance, puis vous trouverez le fichier en suivant ce chemin.

/srv/data/etc/cron/anacrontab

L’éditeur Vim (https://doc.ubuntu-fr.org/vim) et l’éditeur Nano (https://doc.ubuntu-fr.org/nano) sont tous les deux disponibles pour éditer le fichier. Référez-vous aux liens ci dessus pour de plus amples informations.

SFTP:

Si vous choisissez l’option SFTP, téléchargez le fichier anacrontab comme n’importe quel fichier auquel vous avez accès sur l’instance. Vous pouvez ensuite l’éditer localement sur votre système, et lorsque vous êtes prêt, transférez le à nouveau sur votre instance. Il sera automatiquement lu et instancié.

Le fichier se trouve en suivant le chemin suivant :

/lamp0/etc/cron/anacrontab

Note

Utilisez n’importe quel éditeur de texte qui préserve les fins de lignes natives. N’utilisez pas de traitement de texte ! Toute ligne qui commence par un caractère # est un commentaire. Ajouter des commentaires est toujours une bonne idée !

Déterminer la fréquence

Vous spécifiez la fréquence avec deux paramètres, un index de fréquence et un multiplicateur de fréquence avec deux paramètres, un index de fréquence et un multiplicateur.

Les indices de fréquence sont (du plus petit au plus grand) :

  • Hourly (horaire)

  • Daily (journalière)

  • Monthly (mensuelle)

  • Yearly (annuelle)

Pour déterminer la fréquence de votre action, il suffit de multiplier l’indice par la valeur désirée.

Par exemple, si vous voulez effectuer une action toutes les 2 heures, alors entrez : 2@hourly Si vous voulez qu’une opération ait lieu chaque jour comme sauvegarde de votre base de données, par exemple, vous pouvez la spécifier de plusieurs façons : 24@hourly signifie toutes les 24 heures 1@daily signifie une fois par jour (il peut aussi être écrit @daily sans le multiplicateur, puisque 1 est supposé).

Syntaxe

Maintenant que vous savez pour déterminer la fréquence, vous n’avez plus qu’à connaître la syntaxe. Il y a quatre composantes :

  • Fréquence

  • Délai d’attente (timeout)

  • Nom unique

  • Action

Timeout n’est pas utilisé dans notre version d’anacron, et sera ignoré. Pour la compatibilité, nous avons besoin de mettre une valeur, cependant. Le nom unique n’est utilisé que pour identifier la tâche à anacron. Ce nom peut-être n’importe quoi, et doit être unique. Action est la commande à exécuter. Vous pouvez entrer une ligne de commande comme si vous la tapiez. Vous pouvez même appeler des scripts ou des programmes que vous écrirez.

Dans notre exemple, nous allons définir une purge des fichiers temporaires de plus de 7 jours, exécutés quotidiennement tous les jours :

@daily 0 purgetmp find /src/data/tmp -type f -mtime +7 -delete >> /dev/null

L’expression @daily indique que cette action devrait avoir lieu une fois par jour (on pourrait aussi dire 1@daily). 0 correspond à la valeur de timeout ignorée par le système. « Purgetmp » est le nom unique que nous avons attribué à l’action pour l’identifier dans la liste. La commande find /src/data/tmp -type f -mtime 7 -delete >> /dev/null est utilisée pour supprimer les fichiers temporaires de plus de 7 jours.

Exemples d’utilisation

Exporter une base de données MySQL

Dans le cas où vous voulez utiliser des snapshots pour faire des sauvegardes de votre instance, la base de données MySQL est stockée d’une manière qui ne permet pas une récupération simple de ses données en cas de problème.

Pour effectuer une sauvegarde de vos bases de données, il est nécessaire d’effectuer une exportation via la commande mysqldump. Afin d’avoir des sauvegardes à jour, vous devrez créer une tâche anacron afin d’effectuer des sauvegardes régulières. Voici un exemple que vous pouvez ajouter à votre instance (avec quelques adaptations nécessaires pour qu’elle fonctionne avec votre instance) :

@daily 0 mysql_backup mkdir -p /srv/data/tmp/mysql_backup ; mysqldump -u root {-pPASSWORD} --all-databases | /bin/gzip -9 > /srv/data/tmp/mysql_backup/`date '+%F'`.databases.sql.gz ; rm -f /srv/data/tmp/mysql_backup/`date '+%F' --date '1 week ago'`.databases.sql.gz

Cette ligne entraînera l’exportation de votre base de données tous les jours et conservera la dernière exportation pendant une semaine.

Astuce

Envisagez d’adapter la commande à votre propre configuration, si l’utilisateur “root” n’a pas de mot de passe, alors vous devez supprimer {-pPASSWORD}, ou supprimer les parenthèses {} et indiquer le mot de passe de votre utilisateur “root” après “-p”.

Astuce

Vous pouvez exécuter la commande directement via la console afin de vérifier qu’elle fonctionne.

Exporter une base de données PostgreSQL

L’utilisation est similaire à MySQL, la commande pg_dumpall exporte toutes les bases de données postgresql sur l’instance.

@daily 0 psql_backup mkdir -p /srv/data/tmp/psql_backup ;  pg_dumpall --username=hosting-db -h localhost > /srv/data/tmp/psql_backup/`date '+%F'`.databases ; rm -f /srv/data/tmp/psql_backup/`date '+%F' --date '1 week ago'`.databases

Vider un fichier de log

Vous pouvez utiliser anacron pour supprimer le contenu des fichiers de journalisation de votre instance, dans l’exemple suivant le fichier access.log du serveur Web Apache :

@daily 0 purge_apache_logs echo "***** Log cleaned at `date'+%F-%H%M'` *****" > /srv/data/var/log/apache/access.log

Exécuter un script PHP

Vous pouvez aussi exécuter des scripts écrits en PHP. Pour ce faire, vous devrez utiliser la commande php, ainsi que l’option -f et le chemin d’accès au fichier.

Vos fichiers seront toujours situés au même endroit (/srv/data/web/vhosts), suivi du répertoire du VHOST et du chemin d’accès au fichier dans le code de votre application.

Dans l’exemple suivant, nous exécutons tous les jours un fichier appelé cron.php, qui est à la racine de notre VHOST www.example.com.

@daily 0 my_php_script php -f /srv/data/web/vhosts/www.example.com/cron.php

FAQ

Pourquoi anacron au lieu de cron ?

Anacron a l’avantage supplémentaire que si votre instance est hors ligne (disque plein), lorsque votre instance est redémarrée, toutes les tâches qui devaient être exécutées alors que l’instance était hors ligne seront exécutées. Avec cron, ces tâches seraient ignorées, et vous pourriez manquer des tâches de sauvegarde potentiellement importantes.

Quand ma tâche anacron s’exécutera-t-elle ?

Un service vérifie chaque heure pour déterminer s’il y a des tâches qui sont en retard et qui doivent être exécutées. La minute et la seconde exacte où cela se produit est basée sur le moment où l’instance a été démarré, plus un délai aléatoire pour répartir la charge de plusieurs instances sur un seul nœud.