2009-09-28 50 views
6

失敗下面做工作按預期:克朗對單引號

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

28-Sep-2009-14-28

但沒有從crontab的以下4項工作正常。

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

我可以保存在shell腳本相同的代碼,並設置cron的,但我會想知道是否可以直接設置任務一個cron。

,我想設置實際的cron項看起來是這樣的......

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

如果您解決了您的問題,請將其作爲答案發布。 – 2010-01-04 20:58:52

+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 2010-01-05 14:59:51

回答

17

有用於cron作業四種常見的原因命令的行爲方式不同相比,直接鍵入一個交互的shell命令:

  • 的Cron提供了有限的環境中,例如,最小$PATH,以及其他預期變量丟失。
  • 默認情況下,Cron調用/bin/sh,而您可能正在交互式地使用其他一些shell。
  • Cron專門處理%字符(它在命令中變成換行符)。
  • 該命令行爲可能不同,因爲它沒有可用的終端。

您必須先於一切%字符與\在crontab文件,它告訴cron來只是把%的命令,例如

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

(作爲一個獨立問題,始終把雙引號"$variable_substitution""$(command substitution)"左右,除非你知道爲什麼不這樣做在特定情況下。否則,如果變量內容或命令輸出包含空格或?*\[,他們將被shell解釋。)

0

只要有作爲參數到目前爲止提供的格式字符串沒有空格,你不應該需要在所有的蜱。

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

應該工作。

+0

我刪除了上面提到的引號,它仍然不能從cron中運行。它從命令行運行良好。 – shantanuo 2009-09-28 09:48:35

0

您正在使用/ bin/sh不支持的語法。嘗試調用您首選的shell並將該命令作爲參數傳遞。

+0

您能否詳細說明一下? – shantanuo 2009-12-31 06:49:01

+0

你在用什麼外殼? – 2009-12-31 15:39:37

+0

明白了。謝謝。問題解決了。 – shantanuo 2010-01-03 15:26:54