web-dev-qa-db-fra.com

Utilisation de la date / heure système dans un script Cron

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?

38
AeroCross

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.

46
Bruce Ediger

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
7
asoundmove

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/

4
Édouard Lopez

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.

1
user5319

É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
0
LawrenceC