2009-09-28 13 views
6

Poniższy działa zgodnie z oczekiwaniami:Cron nie na pojedynczego apostrofu

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

28-Sep-2009-14-28

Ale żaden z 4 następujących wpisów z crontab pracują.

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

mogę zapisać ten sam kod w skrypcie powłoki i ustawić cron, ale chciałbym wiedzieć, czy jest możliwe, aby bezpośrednio ustawić cron zadania.

Rzeczywista pozycja cron że próbuję ustawić wygląda mniej więcej tak ...

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

Jeśli problem został rozwiązany, opublikuj go jako odpowiedź. –

+0

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

Odpowiedz

17

Istnieją cztery typowe przyczyny cron nakazuje zachowywać się odmiennie w stosunku do komend wpisywanych bezpośrednio do interaktywnej powłoki:

  • Cron zapewnia ograniczonym środowisku, na przykład, minimalną $PATH i inne zmienne oczekiwane brakuje.
  • Domyślnie Cron wywołuje /bin/sh, podczas gdy być może używasz innej powłoki interaktywnie.
  • Cron traktuje charakter % specjalnie (jest on włączony do nowej linii w poleceniu).
  • Polecenie może zachowywać się inaczej, ponieważ nie ma dostępnego terminala.

musi poprzedzać wszystkie % znaków z \ w takiego pliku, który opowiada crona po prostu umieścić % w poleceniu, np

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

(jako odrębnej sprawy, zawsze umieścić cudzysłów wokół "$variable_substitution" lub "$(command substitution)", jeśli nie wiesz, dlaczego nie zrobić go w konkretnym przypadku. W przeciwnym razie, jeśli zmienna zawartość lub dane wyjściowe polecenia zawiera spacje lub ?*\[, będą interpretowane przez powłokę.)

0

Dopóki nie ma spacji w ciągu formatu dostarczanych jako argument do tej pory, nie ma potrzeby kleszcze w ogóle.

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

powinien działać.

+0

Usunąłem cytaty, jak wspomniano powyżej i nadal nie działa z crona. Działa dobrze z linii poleceń. – shantanuo

0

Używasz składni nie obsługiwanego przez/bin/sh. Spróbuj wywołać swoją preferowaną powłokę i przekazując polecenie jako argument.

+0

Czy mógłbyś rozwinąć? – shantanuo

+0

Jaką powłokę używasz? –

+0

rozumiem. Dzięki. Problem rozwiązany. – shantanuo

Powiązane problemy