我的 cronjob 语法有什么问题,我正在尝试使用反引号 (`)?

Ter*_*ber 38 cron syntax

这是我想要自动化的内容:

00 08 * * * psql -Uuser database < query.sql | mail somone@null.com -s "query for `date +%Y-%m-%dZ%I:%M`"
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)

Jul*_*ano 79

crontab(5)

``sixth'' 字段(该行的其余部分)指定要运行的命令。该行的整个命令部分,直到换行符或 % 字符,将由 /bin/sh 或由 crontab 文件的 SHELL 变量中指定的 shell 执行。命令中的百分号 (%),除非用反斜杠 () 转义,否则将更改为换行符,第一个 % 之后的所有数据将作为标准输入发送到命令。无法将单个命令行拆分为多行,例如 shell 的尾随“\”。

只需在 % 符号前添加反斜杠:

00 08 * * * psql -Uuser database < query.sql | mail somone@null.com -s "query for `date +\%Y-\%m-\%dZ\%I:\%M`"
Run Code Online (Sandbox Code Playgroud)


Eri*_*thi 13

要解决此问题,请转义您的 % 字符date +%Y-%m-%d应该date +\%Y-\%m-\%d

不幸的是,这个答案有点晚了,但问题不是 PATH 或反引号 - 问题只是百分比字符 '%' 是一个特殊字符,用于表示 crontab 条目中的 NEWLINE 或 STDIN

这与date命令的格式输入冲突。因此,包含:的命令date +%Y-%m-%d将被解释为:

date Y- m- d


小智 5

我也有很多反引号问题。有时您需要多次出现引号和反引号。只需将它们替换为 $()​​。

例子:

export NOW=`date`
by
export NOW=$(date)
Run Code Online (Sandbox Code Playgroud)

-吉尔森苏亚雷斯

  • 但这与用户的问题无关。 (4认同)