天天看点

crontab条目包含%号问题

crontab条目中包含%号,最常见的取时间,如:date +%d,

对%需要使用\进行转义,否则不能按预期执行,正确做法为:

* * * * * echo "`date +\%d`" > /tmp/r1r.txt

而不能为

* * * * * echo "`date +%d`" > /tmp/r1r.txt

%是crontab的特殊字符,所有%后的被当作了标准输入,这可以通过“ man 5 crontab”查看到说明:

The entire command portion of the line, up to a newline or a "%" character,

will be executed by /bin/sh or by the shell specified in the SHELL variable of the cronfile.

A "%" character in the command, unless escaped with a backslash (\), 

will be changed into newline char-acters,

and all data after the first % will be sent to the command as standard input.

示例:

$ cat /tmp/hello.txt 

cat: /tmp/hello.txt: 没有那个文件或目录

$ echo -e "`crontab -l`\n* * * * * cat > /tmp/hello.txt % hello word"|crontab -

$ crontab -l|grep hello.txt

* * * * * cat > /tmp/hello.txt % hello word

 hello word