2009-09-28 12 views
6

Il seguente funziona come previsto:Cron non riesce a singolo apostrofo

date +'%d-%b-%Y-%H-%M' 

28-Sep-2009-14-28

Ma nessuno dei seguenti 4 voci dal crontab stanno lavorando.

 
* * * * * date +\'%d-%b-%Y-%H-%M\' >> /backup/shantanu/testing.txt 
* * * * * date +'%d-%b-%Y-%H-%M' >> /backup/shantanu/testing1.txt 
* * * * * date +"%d-%b-%Y-%H-%M" >> /backup/shantanu/testing2.txt 
* * * * * date +\"%d-%b-%Y-%H-%M\" >> /backup/shantanu/testing3.txt 
 
Error: 
/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' 
/bin/sh: -c: line 1: syntax error: unexpected end of file 

posso salvare lo stesso codice in uno script di shell e impostare il cron, ma mi piacerebbe sapere se è possibile impostare direttamente un cron per l'attività.

La voce di cron reale che sto cercando di impostare simile a questa ...

16 * * * * mysqldump myDB myTB > /backup/ABCbc$(date +'%d-%b-%Y-%H-%M').sql 2> /backup/ABCbc_errORS$(date +'%d-%b-%Y-%H-%M').txt
+0

Se hai risolto il tuo problema, per favore pubblicalo come risposta. –

+0

58 13 * * */usr/bin/mysqldump -uroot -pPassWord --compact - database db1 db2 db3 db4 | zip>/home/sviluppo/backup/central_mydt $ (data + '\% d \% m \% y'). zip – shantanuo

risposta

17

Esistono quattro cause comuni per cron comandi a comportarsi in modo diverso rispetto ai comandi digitati direttamente in una shell interattiva:

  • Cron fornisce un ambiente limitato, per esempio, un minimo $PATH, e altre variabili attesi mancanti.
  • Cron invoca per impostazione predefinita /bin/sh, mentre è possibile che si stia utilizzando qualche altra shell in modo interattivo.
  • Cron tratta il carattere % in modo particolare (viene trasformato in una nuova riga nel comando).
  • Il comando può comportarsi diversamente perché non ha un terminale disponibile.

È necessario precedere tutti % personaggi con un \ in un file crontab, che dice a cron ad appena messo un % nel comando, per esempio

 
16 * * * * mysqldump myDB myTB > "/backup/ABCbc$(date +'\%d-\%b-\%Y-\%H-\%M').sql" 2> "/backup/ABCbc_errORS$(date +'\%d-\%b-\%Y-\%H-\%M').txt" 

(Come una questione separata, sempre mettere le virgolette attorno a un "$variable_substitution" o un "$(command substitution)", se non si sa perché non farlo in un caso particolare. In caso contrario, se il contenuto delle variabili o l'output del comando contiene spazi o ?*\[, saranno interpretati dalla shell.)

0

Finché non ci sono spazi nella stringa di formato fornito come argomento fino ad oggi, non dovrebbe essere necessario le zecche a tutti.

date +%d-%b-%Y-%H-%M 

dovrebbe funzionare.

+0

Ho rimosso le virgolette come accennato in precedenza e ancora non funziona da cron. Funziona bene da una riga di comando. – shantanuo

0

Si sta utilizzando una sintassi non supportata da/bin/sh. Prova a richiamare la tua shell preferita e passare il comando come argomento.

+0

Potete per favore elaborare? – shantanuo

+0

Quale shell stai usando? –

+0

capito. Grazie. Problema risolto. – shantanuo