2009-07-20 7 views
6

Ho un set di crontab che cancella ogni volta che provo a farlo. Funziona bene nella shell. È il formato che sto usando quando tento di inserire automaticamente la data nel nome del file del backup del database. Qualcuno conosce la sintassi che devo usare per far sì che cron mi faccia inserire la data nel nome del file?Formato corretto per un nome file dinamico mysqldump in un cron?

mysqldump -hServer -uUser -pPassword Table | gzip > 
/home/directory/backups/table.$(date +"%Y-%m-%d").gz 

Grazie in anticipo!

risposta

15

Che dire qualcosa di simile per la parte "comando" del crontab:

mysqldump --host=HOST --user=USER --password=PASSWORD DATABASE TABLE | gzip > /tmp/table.`date +"\%Y-\%m-\%d"`.gz 

Cosa è cambiato dalla OP è la fuga del formato della data:

date +"\%Y-\%m-\%d" 

(e ho usato apici inversi - ma che dovrebbe fare molta differenza)

(altra soluzione sarebbe quella di mettere il tuo comando originale in uno script di shell, ed esegui questo da crontab, invece del comando - probabilmente sarebbe più facile da leggere/scrivere ^^)

+1

Come nota a margine: utilizzo quasi sempre le opzioni lunghe, quindi il comando è più facile da capire/modificare da qualcuno che non usa spesso gli strumenti da riga di comando –

+0

Per qualsiasi motivo, ho dovuto rimuovere le barre per la mia istanza. Grazie per questo però. : 3 – r109

0

Il motivo più tipico per "funziona nella shell ma non in cron" è che i comandi che si tenta di eseguire non sono in PATH. La shell invocata da cron non sta caricando gli stessi file della shell di login.

Correzione: aggiungere il percorso assoluto a ciascun comando che si tenta di eseguire.

Seconda cosa che noto nel tuo comando. La sintassi per l'esecuzione del comando date sembra non molto portabile. Cambiamento che essere in backtick, o eseguire mettere tutto il tuo comando per shellscript (anche, lo si può utilizzare per impostare il percorso troppo) ed eseguire lo script da cron ..

EDIT:

Durante la mia scrittura risposta originale il layout della mia tastiera non aveva i backtick quindi controlla cosa ha scritto Pascal.

E esempio di quello che si potrebbe fare con uno shellscript:

Copia seguente per /usr/local/bin/dumptable.sh

#!/bin/sh 
/usr/bin/mysqldump --host=HOST --user=USER --password=PASSWORD DATABASE TABLE | /bin/gzip > /tmp/table.`/bin/date +"\%Y-\%m-\%d"`.gz 

e poi mettere la directory/usr/local/bin /dumptable.sh in cron ..