2009-09-28 5 views
6

apostrophe Ce qui suit ne fonctionne comme prévu:Cron unique

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

28-Sep-2009-14-28

Mais aucun des 4 entrées suivantes de crontab travaillent.

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

je peux enregistrer le même code dans un script shell et définissez le Cron, mais je voudrais savoir s'il est possible de régler directement un cron pour la tâche.

L'entrée cron réelle que je suis en train de mettre ressemble à quelque chose comme ça ...

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

Si vous avez résolu votre problème, veuillez le poster comme réponse. –

+0

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

Répondre

17

Il y a quatre causes communes pour les commandes cron job à se comporter différemment par rapport aux commandes tapées directement dans un shell interactif:

  • Cron offre un environnement limité, par exemple, un $PATH minimal, et d'autres variables attendues manquantes. Par défaut, Cron appelle par défaut /bin/sh, alors que vous pouvez utiliser un autre shell de manière interactive.
  • Cron traite spécialement le caractère % (il est transformé en nouvelle ligne dans la commande).
  • La commande peut se comporter différemment car aucun terminal n'est disponible.

Vous devez précéder tous % caractères avec un \ dans un fichier crontab, qui dit Cron de mettre juste un % dans la commande, par exemple

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

(En séparé, toujours mettre des guillemets doubles autour d'un "$variable_substitution" ou "$(command substitution)", sauf si vous savez pourquoi ne pas le faire dans un cas particulier. Dans le cas contraire, si le contenu de la variable ou la sortie de commande contient des espaces blancs ou ?*\[, ils seront interprétés par le shell.)

0

Tant qu'il n'y a pas d'espace dans la chaîne de format fourni comme argument à ce jour, vous ne devriez pas avoir besoin les tiques du tout.

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

devrait fonctionner.

+0

J'ai supprimé les guillemets comme mentionné ci-dessus et cela ne fonctionne toujours pas depuis cron. Cela fonctionne bien à partir d'une ligne de commande. – shantanuo

0

Vous utilisez une syntaxe non prise en charge par/bin/sh. Essayez d'appeler votre shell préféré et passez la commande en argument.

+0

Pouvez-vous élaborer s'il vous plaît? – shantanuo

+0

Quelle coque utilisez-vous? –

+0

l'ai eu. Merci. Problème résolu. – shantanuo