2010-07-22 62 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