如何在cron标签作业中执行`date`?


117

我想为cron脚本创建一个日志文件,该日志文件名称中包含当前小时。这是我尝试使用的命令:

0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log

不幸的是,我在运行时收到此消息:

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

我尝试过date各种方式使零件逃脱,但运气不佳。是否可以在crontab文件中在线进行此操作,还是需要创建Shell脚本来执行此操作?

Answers:


180

简短答案:

转义%\%

0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+\%d"`.log

长答案:

错误消息表明执行您的命令的外壳程序看不到第二个反勾字符:

/bin/sh: -c: line 0: unexpected EOF while looking for matching '`'

您在尝试其他答案之一时收到的第二条错误消息也证实了这一点:

/bin/sh: -c: line 0: unexpected EOF while looking for matching ')'

crontab的手册页确认命令只读到第一个转义%符号:

“第六”字段(该行的其余部分)指定要运行的命令。该行的整个命令部分,直至换行符或 %字符,将由cronfile变量中/bin/sh指定的shell或由shell 执行SHELL除非使用反斜杠(进行转义,否则命令中的百分号% \)将更改为 换行符,并且第一个后的所有数据%将作为标准输入发送到命令。


对不起,很抱歉,您在哪里看到此错误消息?当我执行'grep CRON / var / log / syslog'时,尽管cron失败,但我看不到任何错误消息 -kagda.ru/i/9a016249a39_20-05-2015-09:22:47_9a01.png
Tebe

2
@Копать_Шо_я_нашелcron将发送带有错误消息的电子邮件,
Jasen

3
date +\%Y\ \%m\ \%d\ \%H:\%M:\%S-cronlog
DevilCode '16


6

如果要将日期格式设置的字符串作为变量(以避免重复整个字符串),请不要转义%并且不要将其放入$()

例如,在声明字符串时,只需编写:

DATEVAR=date +%Y%m%d_%H%M%S

然后,用$($VARIABLE_NAME)如下代码编写cron语句:

* * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log

多亏了cyberx86她/他ServerFault上的回答可能更加完整:


1
DATEVAR =“ date +%Y%m%d_%H%M%S”
Frank Fang

3

在cron中,您可以使用以下简单语法:

*/15 01-09 * * * sh /script.sh >> /home/username/cron_$(date -d"-0 days" +\%Y\%m\%d).log 2>&1

输出日期格式将像cron_20180123.log一样重新运行
bala4rtraining

(1)您说的是尚未接受的答案?(2)您的答案比问题复杂得多。例如,您添加了该-d选项,该选项未在问题中使用(并且您没有对其进行解释)。您如何称呼这种“简单语法”合理?
G-Man

2

以上所有答案均使用双引号(并非所有设置都适用于我的设置)。这为我工作:

0 5 * * 3 /data/script.sh > /data/script_`date +\%y\%m\%d`.log 2>&1

1
您说的是尚未接受的答案?您是说不带引号比带引号更好吗?(提示:这不太可能。)
G-Man

接受的答案对我根本不起作用。这一个。
Manuel Schmitzberger

0

基本解决方案:

  • 使用$()用于执行date命令并返回输出
  • 将datetime格式化为UTC,%使用\
  • 添加2>&1在最后的流都stdoutstderr到该日志文件

例:

* * * * * echo "Test crontab log" > /tmp/crontab.log.$(date --utc +\%Y\%m\%d_\%H\%M\%SZ) 2>&1

输出:

ls -lh /tmp | grep log

-rw-rw-r-- 1 ubuntu  ubuntu    17 May  4 05:06 crontab.log.20190504_050601Z
-rw-rw-r-- 1 ubuntu  ubuntu    17 May  4 05:07 crontab.log.20190504_050701Z
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.