cron作业出错,但在shell上工作正常

Posted

技术标签:

【中文标题】cron作业出错,但在shell上工作正常【英文标题】:Error on cron job, but working fine on shell 【发布时间】:2013-10-20 18:54:21 【问题描述】:

我正在配置 Cron 以自动备份我的 sql。但是我认为 Cron 存在一些问题,并且运行不佳。

这是我正在运行的命令:

mysqldump --opt -Q -uhereisthename -p'hereisthepasswordwithstrangecharactersthatmustbeescaped' databasename | gzip > /home2/username/backups/backupnamefolder/backupdbwebsitename.`date +"%Y-%m-%d"`.gz

当我通过 SSH 运行它时,它可以正常工作并生成备份。 但是,如果我通过 Cron 运行它,我会收到以下错误:

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

任何人都可以提出什么问题?

【问题讨论】:

【参考方案1】:

Cron 将 % 视为特殊字符(意思是“新行”,因此在错误消息中引用了第 0 行和第 1 行)。你需要逃避它:

date "+\%Y-\%m-\%d"

顺便说一句,posix $( ) 语法通常比反引号更好 - 它允许嵌套命令。

【讨论】:

嗨,我使用的 Shell 是 Bash,它在那里工作。我已经按照你说的做了。我 cron 命令现在是 bash -c "mysqldump --opt -Q -uhereisthename -p'hereisthepasswordwithstrangecharactersthatmustbeescaped' databasename | gzip > /home2/username/backups/backupnamefolder/backupdbwebsitename.date +"%Y-%m-%d".gz" 但我仍然得到完全相同的两行错误以 /bin/sh: -c: line 抱歉,我在发布后不久就意识到出了什么问题 - 请参阅我编辑的答案。 嗨,谢谢。这两个版本我都试过了。使用(date +"%Y-%m-%d")date +"\%Y-\%m-\%d" 给出相同的错误。 :( 也许是因为我在密码中间有 % 符号? 有效!我还必须 \ 转义密码中的 % 。我认为反引号会做到这一点。但他们没有。谢谢。

以上是关于cron作业出错,但在shell上工作正常的主要内容,如果未能解决你的问题,请参考以下文章

无法添加Cookie,已发送标头。 cron作业出错,但在浏览器中加载时无效

cron 作业在 cpanel 中无法正常工作

AWS Elastic Beanstalk CRON 作业设置

仅在尚未运行时运行 cron 作业

cron 作业不工作

如何取消或停止Google App Engine Cron作业