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.
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
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
Comment utiliser Anacron pour planifier des tâches sur un Hébergement Web Gandi¶
Concept
Configurer
Pour modifier le fichier depuis le Panneau de Contrôle
Console d’urgence
SFTP:
Déterminer la fréquence
Syntaxe
Exemples d’utilisation
Exporter une base de données MySQL
Exporter une base de données PostgreSQL
Vider un fichier de log
Exécuter un script PHP
FAQ
Pourquoi anacron au lieu de cron ?
Quand ma tâche anacron s’exécutera-t-elle ?
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 Sécurité » 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 et Sécurité ») 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 heures1@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 dire1@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 commandefind /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) :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.
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 :
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 VHOSTwww.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.