2011-08-27 5 views
6

posso usare questo comandoBackup utilizzo di database crontab con funzione di data

mysqldump -u"root" myDB| gzip > mydb_`date +%d-%m-%Y`.sql.gz 

ma se eseguito in crontab

* * * * * mysqldump -u"root" myDB| gzip > mydb_`date +%d-%m-%Y`.sql.gz 

(questa causa dell'errore per data funzione, quando rimuovo esso, crontab gestita bene

su ubuntu, si verifica questo errore nel file di registro.

ubuntu CRON[xxxx] (user) CMD(mysqldump -u"root" myDB| gzip > mydb_`date+) 
ubuntu CRON[xxxx] (CRON) error (grandchild #5353 failed with exit status 2) 
ubuntu CRON[xxxx] (CRON) info (no MTA installed, discarding output) 
+1

Il tuo crontab non è lo stesso comando che stai eseguendo dalla riga di comando. Hai omesso 'date +% d-% m-% Y' (notando la mancanza di backtics) che sono ciò che rende effettivamente funzionante, come i backtics eseguono e restituiscono il risultato della data .... funzione. – gview

+0

è lo stesso, ma non riesco a scrivere con StackOverflow. – meotimdihia

+0

Sì, è possibile. Utilizzare i backtick per formattare parte di una riga come codice; indentare con 4 o più spazi per formattare una o più righe come codice. Seleziona l'intervallo di testo e fai clic sull'icona '{}' per farlo automaticamente. Oppure puoi sfuggire a un backtick con una barra rovesciata: '\' '. –

risposta

13

% segni in un comando crontab vengono convertiti in nuove linee, e tutti i dati dopo il primo % viene inviato allo stdin del comando. Sostituire ogni % con \%.

(E si aveva solo 4 campi di tempo: * * * *; è necessario 5 (in seguito fissata alla domanda).)

+0

ho fissato la domanda è * * * * * – meotimdihia

+0

funziona ora, grazie – meotimdihia

0

Dal man 5 crontab:

Il sesto '' campo `` (la rest of the line) specifica il comando da eseguire .

L'intera porzione di comando della linea, fino ad una nuova riga o% carattere, verrà eseguito da/bin/sh o dalla shell specificato nella variabile SHELL del file crontab.

Percent-segni (%) nel comando , a meno che non fuggì con backslash(), saranno trasformati in caratteri di nuova riga, e tutti i dati dopo il primo% saranno inviati al comando come input standard. Non c'è modo di dividere un singolo comando nella riga su più righe, come il "\" finale della shell.