Je configure un Cronjob qui sauvegardera une base de données MySQL que j'ai sur mon serveur, mais je ne veux pas qu'il écrase le même fichier encore et encore. Au lieu de cela, je veux avoir un ensemble de sauvegardes parmi lesquelles choisir, effectuées automatiquement. Par exemple:
## Cronjob, run May 21st, 2011:
mysqldump -u username -ppasword database > /path/to/file/21-03-2011.sql
## SAME Conjob, run May 28th, 2011:
mysqldump -u username -ppasword database > /path/to/file/28-03-2011.sql
Etc.
Existe-t-il un moyen d'utiliser la date et/ou l'heure système comme une sorte de variable dans mon Cronjob? Sinon, quelles sont vos suggestions pour accomplir la même chose?
Vous pouvez essayer quelque chose comme ça (comme le note Glenn Jackmann ci-dessous, vous devez échapper à tous les caractères %
):
15 11 * * * touch "/tmp/$(date +\%d-\%m-\%Y).sql"
Pour voir si votre cron particulier exécutera la commande à partir de crontab en tant que script en soi, ou si vous devez écrire un script qui représente la date sous forme de chaîne, puis exécute votre commande mysqldump.
Sans échapper au %
, "Cron" sur Redhat Enterprise Linux 5.0 (je pense) n'arrêtait pas de me donner des erreurs pour ne pas trouver un )
Correspondant. En effet, tout ce qui suit un %
Non échappé est envoyé à l'entrée standard de la commande.
Je prendrais également la recommandation d'utiliser le format de date ISO8601 (aaaa-mm-jj, qui est %F
) Pour que les noms de fichiers soient classés par date lorsqu'ils sont triés lexicalement.
Vous devriez pouvoir utiliser date
.
Tapez info date
ou man date
pour plus de détails.
Quelque chose comme ce qui suit pourrait vous convenir (changez le format de la date selon vos besoins)
yourcommand > filepathandnameprefix$(date +"\%d-\%m-\%Y").extension
Pour qu'une telle commande fonctionne correctement, nous devrons échapper% , puis elle s'exécutera comme prévu.
Voir: http://www.ducea.com/2008/11/12/using-the-character-in-crontab-entries/
Voici le script bash que j'ai utilisé:
#!/bin/bash
mysqldump -u user1 -p DatabaseName | gzip > BackupFolder/backup`date +%F_%T`.sql.gz
Les fichiers ressemblent à:
backup2011-03-02_15:16:46.sql.gz
Pointez le travail cron sur cela pour exécuter la nuit ou tout ce que vous préférez.
Écrivez un petit script d'encapsulation qui utilise la commande date
et appelle votre commande de sauvegarde.
#!/bin/bash
NOW=`/bin/date +"%m%d%Y-%H%M%S"`
if [[ "$?" != "0" ]]; then
NOW="UNKNOWN_DATE"
fi
mysqldump -u username -ppassword database > /path/to/file/$NOW.sql
if [[ "$?" != "0" ]]; then
echo "$0: backup failed with error code $?"
fi