命令可以从命令行运行,但无法从cron中运行?

4

我在我的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个回答

4

来自crontab手册:

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


1

定时任务存在以下一般性问题:

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

提示

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

@MichaelKrelin-hacker:忍者编辑——在阅读问题时输入响应:)你说得对,我的第一直觉并不是主要问题。 - sehe
是的,我看到你在我评论后进行了转义,除非你是一台计算机,在你阅读之前可能已经开始这样做了 :) - Michael Krelin - hacker

0

查看cron文件的权限。如果它是由您拥有的,则可以使用~。否则,请使用完整路径..!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接