以下命令在提示符下起作用,但不能从crontab起作用。

 grep abc  /var/log/messages | grep "`date '+%B %d'`" | mail -s"abc log of `hostname`" shantanu.oak+`hostname`@gmail.com


我需要将其添加到日常cron中。

评论

您的示例非常了不起,%用双引号,简单引号和反引号引起来。寄希望于转义引号不可行。

#1 楼

您必须转义%标志。它们在crontabs中具有特殊含义:

man (5) crontab:

Percent-signs (%) in the command, unless escaped with backslash (\), 
will be changed into newline characters, and all data after the 
first % will be sent to the command as standard input.


评论


好吧,我确实碰到了这一点。我正在使用日期+%F,却一无所获

– adamo
15年2月20日在12:14

这个语法有什么用吗?使用SHELL = / bin / bash,我始终可以将cat%Hello world重写为cat <<<'Hello world'。我认为不需要特殊语法。

–Witiko
17年7月19日在13:54

@Witiko如果您要问的“特殊语法”是反斜杠以逃避百分比,那么OP自身的问题就是需要使用示例的例子:需要百分比的命令参数,尤其是日期程序,在命令行中非常流行crontab命令。如果您实际上是在问为什么cron首先要解决此难题:即:用换行代替%,那么我想您可以在crontab要求的单行中提供由以下两个组成的“命令”或更多辅助命令。

– gwideman
18-09-6在3:57

后者。而且,正如我提到的,使用bash可以做到这一点。无需乱写Cron的语法。

–Witiko
18/09/6在11:11

#2 楼

这不能直接回答您的问题,但是我建议您在/ usr / local / bin(或〜/ bin或任何合适的文件)中创建一个脚本文件,然后从cron调用它。测试和编辑更加容易。

评论


以我的经验,在crontab中维护50行比维护50个小文件要容易得多。您肯定会想要将更长的脚本转换为脚本文件,但是这样做对于单行脚本可能是一个过大的杀伤力。

–Witiko
17-10-3在0:13