命令从命令行运行,而不是从cron运行?

时间:2011-11-23 10:09:24

标签: bash shell cron

我的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中预期的语法之间是否存在差异?

3 个答案:

答案 0 :(得分:4)

来自crontab联机帮助页:

  

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

答案 1 :(得分:1)

由于以下一般原因,Crontabs容易出错:

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

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

答案 2 :(得分:0)

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