2010-07-22 100 views
3

運行此命令:語法錯誤時,命令從cron

/usr/bin/mysqldump --add-drop-table -u myuser -pmypass mydb > "/home/myuser/dbBackups/"`date +%Y%m%d`".sql" 

工作在命令行罰款,但whenb的cron運行它,我得到

/bin/sh: -c: line 0: unexpected EOF while looking for matching ``' 
/bin/sh: -c: line 1: syntax error: unexpected end of file 

的命令是所有在一行該crontab以及所以我很困惑的線0和線1參考...

任何人都可以告訴我,我在做什麼錯了嗎?

+0

當您從命令行運行時,您是否使用與cron使用的相同的shell(/ bin/sh)? – 2010-07-22 21:05:38

+0

提到哪個unix會有幫助。 我可以從可用信息中猜出唯一的事情,就是您的登錄shell可能不是/ bin/sh,因此請嘗試運行/ bin/sh,然後運行您的命令。 哦,還要檢查一下,確保你沒有一個製表符來代替那裏的空間--cron可能會因此而感到困惑。 – LeBleu 2010-07-22 21:06:32

+0

啊!我運行bash和cron不是。任何概念/ bin/sh中正確的反引號語法是什麼?我真的只熟悉bash。 服務器是Linux。 – jerrygarciuh 2010-07-22 21:11:44

回答

4

最簡單的解決方法是將整個命令放在shell腳本中,然後運行。因此,創建一個scriptName.sh文件,其中包含您列出的命令並使crontab調用該腳本。這解決了所有這些奇怪的問題。

+0

謝謝,這個伎倆! – jerrygarciuh 2010-07-22 21:50:23

+0

我一直在嘗試一個小時,讓cron運行.sh,我得到的只是「SyntaxError:invalid syntax」。血腥的Linux! – 2012-03-05 10:06:06

1

從cron執行的命令無法訪問來自登錄shell的環境變量,包括路徑。嘗試以下方法(將完全限定路徑日期):

/usr/bin/mysqldump --add-drop-table -u myuser -pmypass mydb > "/home/myuser/dbBackups/"`/usr/bin/date +%Y%m%d`".sql" 

當然,驗證您的date命令運行which date然後根據需要調整路徑位於其他地方。

+0

這是我將來要牢記的一個很好的觀點。沒有解決這個問題,但我肯定應該確保完整的路徑包含在那裏。 – jerrygarciuh 2010-07-22 21:26:08

5

這是一個明顯的愚蠢的問題,但你有你的crontab中匹配的反引號(crontab -l)?

第一行,第零行的東西並不是指crontab中的行,只是指向單行腳本中的「行」。

更新時間:

嗯,我想我已經得到了它。這是從的crontab(5):

Percent-signs (%) in the command, unless escaped with backslash (\), 
will be changed into newline characters, and all data after the 
first % will be sent to the command as standard input. 

所以在你的日期規範的百分比字符被解釋爲換行符,這意味着反引號不換行,這將產生你的錯誤消息之前終止。

因此,請跳過百分比字符。我忘記了關於crontab的問題......

+0

當然可以;上面的cmd正是它減去實際的un/pw/db名稱。 – jerrygarciuh 2010-07-22 21:15:58