it-swarm.it

Utilizzo della data / ora di sistema in uno Script Cron

Sto configurando un Cronjob che eseguirà il backup di un database MySQL che ho nel mio server, ma non voglio che continui a sovrascrivere sempre lo stesso file. Invece, voglio avere una serie di backup tra cui scegliere, eseguita automaticamente. Per esempio:

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

E così via.

Esiste un modo in cui posso usare la data e/o l'ora del sistema come una sorta di variabile nel mio Cronjob? In caso contrario, quali sono i tuoi suggerimenti per ottenere lo stesso risultato?

38
AeroCross

Potresti provare qualcosa del genere (come osserva Glenn Jackmann di seguito, devi scappare da tutti i caratteri %):

15 11 * * * touch "/tmp/$(date +\%d-\%m-\%Y).sql"

Per vedere se il tuo cron particolare eseguirà il comando da crontab come script in sé e per sé, o se è necessario scrivere uno script che calcoli la data come una stringa e quindi esegua il comando mysqldump.

Senza sfuggire a %, "Cron" su Redhat Enterprise Linux 5.0 (penso) continuava a darmi errori nel non trovare un ) Corrispondente. Questo perché tutto dopo un % Senza caratteri di escape viene inviato all'input standard del comando.

Vorrei anche prendere la raccomandazione di utilizzare il formato data ISO8601 (aaaa-mm-gg, che è %F) Per rendere i nomi dei file ordinati per data quando ordinati in modo lessicale.

46
Bruce Ediger

Dovresti essere in grado di usare date.
Genere info date o man date per dettagli.

Qualcosa di simile al seguente potrebbe adattarsi a te (cambia il formato della data in base alle tue esigenze)

yourcommand > filepathandnameprefix$(date +"\%d-\%m-\%Y").extension
7
asoundmove

Per avere un comando simile eseguito correttamente dovremo scappare% e quindi verrà eseguito come previsto.

Vedi: http://www.ducea.com/2008/11/12/using-the-character-in-crontab-entries/

4
Édouard Lopez

Ecco lo script bash che ho usato:

#!/bin/bash
mysqldump -u user1 -p DatabaseName | gzip > BackupFolder/backup`date +%F_%T`.sql.gz

I file sembrano:

backup2011-03-02_15:16:46.sql.gz

Punta il cron job su questo per eseguire di notte o qualunque cosa tu preferisca.

1
user5319

Scrivi un piccolo script wrapper che utilizza il comando date e chiama il tuo comando di backup.

#!/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