【问题标题】:Command runs from command line, not from cron?命令从命令行运行,而不是从 cron?
【发布时间】:2011-11-23 10:09:23
【问题描述】:

我的 cron 文件中有以下命令:

*/15 * * * * NODE_ENV=production ~/bin/node ~/myapp/app.js > /var/log/nodelog/nodelog_`date "+%Y-%m-%d_%H-%M"`.log

命令本身在复制并粘贴到 bash shell 时运行正常,但 cron 作业不断发送以下错误消息:

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

为什么它从命令行运行正常,但在 cron 作业中失败?命令行中预期的语法与 cron 中预期的语法有区别吗?

【问题讨论】:

    标签: bash shell cron


    【解决方案1】:

    来自 crontab 手册页:

    命令中的百分号 (%),除非用反斜杠转义 (\),将变为换行符,后面的所有数据 第一个 % 将作为标准输入发送到命令。

    【讨论】:

      【解决方案2】:

      Crontab 容易出错,一般原因如下:

      1. crontab 中的格式要求
      2. 权限
      3. 环境

      提示

      • 在您的 crontab (!) 中使用 脚本,而不是内联命令 - 避免转义问题
      • 在您的 cron 脚本中使用绝对路径。
      • 使用env -i ./myscript.sh 进行测试

      【讨论】:

      • @MichaelKrelin-hacker:忍者编辑 - 在阅读问题时正在输入响应 :) 你说得对,我的第一个预感不是这里的主要问题
      • 是的,我看到你在我发表评论后转义了,除非你是电脑,否则可能在你阅读之前就开始这样做了:)
      【解决方案3】:

      查看 cron 文件权限。如果它归你所有,那么你可以使用~。否则使用完整路径..!

      【讨论】: