cwd*_*cwd 165 cron quoting command-substitution
我想为日志文件名中包含当前小时的 cron 脚本创建一个日志文件。这是我尝试使用的命令:
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
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)
我曾尝试date以各种方式逃避该部分,但运气不佳。是否可以在 crontab 文件中内嵌进行此操作,或者我是否需要创建一个 shell 脚本来执行此操作?
Ada*_*man 246
转义%为\%:
0 * * * * echo hello >> ~/cron-logs/hourly/test`date "+\%d"`.log
Run Code Online (Sandbox Code Playgroud)
该错误消息表明执行您的命令的 shell 没有看到第二个反勾号字符:
/bin/sh: -c: line 0: unexpected EOF while looking for matching '`'
Run Code Online (Sandbox Code Playgroud)
当您尝试其他答案之一时收到的第二条错误消息也证实了这一点:
/bin/sh: -c: line 0: unexpected EOF while looking for matching ')'
Run Code Online (Sandbox Code Playgroud)
该crontab的手册页确认命令只读到第一个转义%符号:
“第六个”字段(行的其余部分)指定要运行的命令。该行的整个命令部分,直到换行符或
%字符,将由cronfile/bin/sh的SHELL变量中指定的 shell 或由 shell执行。 命令中的百分号 (%) 除非用反斜杠 (\)转义,否则将更改为 换行符,第一个之后的所有数据%将作为标准输入发送到命令。
小智 14
如果您想将日期格式化字符串作为变量(以避免复制整个字符串),请不要转义%并且不要将其放入$()
例如,在声明字符串时,只需编写:
DATEVAR=date +%Y%m%d_%H%M%S
Run Code Online (Sandbox Code Playgroud)
然后,$($VARIABLE_NAME)像这样编写 cron 语句:
* * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log
Run Code Online (Sandbox Code Playgroud)
多亏了Cyberx86,她/他在ServerFault 的回答可能更完整:
小智 8
你也可以把你的命令放到一个 shell 文件中,然后用 cron 执行 shell 文件。
工作.sh
echo hello >> ~/cron-logs/hourly/test`date "+%d"`.log
Run Code Online (Sandbox Code Playgroud)
定时任务
0 * * * * sh jobs.sh
Run Code Online (Sandbox Code Playgroud)
小智 5
在 cron 中,您可以使用以下简单语法:
*/15 01-09 * * * sh /script.sh >> /home/username/cron_$(date -d"-0 days" +\%Y\%m\%d).log 2>&1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
147378 次 |
| 最近记录: |