mkb*_*mkb 80
在Vixie cron中,这可能是最常见的,你几乎可以像shell脚本一样.
VARIABLE=value
PATH=/bin:/path/to/doathing
0 0 * * * doathing.sh $VARIABLE
Run Code Online (Sandbox Code Playgroud)
手册页说:
crontab中的活动行将是环境设置或cron命令.环境设置的形式,
Run Code Online (Sandbox Code Playgroud)name = value
等号(=)周围的空格是可选的,值中任何后续的非前导空格都是分配给name的值的一部分.值字符串可以放在引号中(单引号或双引号,但匹配)以保留前导或尾随空白.名称字符串也可以放在引号中(单个或双重,但匹配)以保留前导,尾随或内部空白.
您可以通过查看手册页来判断您是否拥有Vixie cron crontab
; 作者将是Paul Vixie.不同的crons可能支持也可能不支持(例如,BusyBox的cron,不支持),在这种情况下,最好的选择是将命令包装在shell脚本中,然后从cron运行该脚本.事实上,对于任何复杂的事情来说,这是一件好事.
Bro*_*ace 11
我认为这里需要指出的重要事实是(正如 Pierre D 在 2015 年 3 月 25 日 18:58 的早期评论中所述)变量声明不会扩展/插值,因此不能嵌入其他变量值。
变量仅在命令本身中扩展/插值。
所以:
var1 = bar
var2 = foo${var1}
42 17 * * * /path/to/command ${var2}
Run Code Online (Sandbox Code Playgroud)
结果是:/path/to/command foo${var1}
尽管:
var1 = bar
var2 = foo
42 17 * * * /path/to/command ${var2}${var1}
Run Code Online (Sandbox Code Playgroud)
结果是:/path/to/command foobar
因此,在我的情况下,以下工作正常,不需要包装 shell 脚本:
SHELL=/bin/bash
timestamp=date +20%y_%m_%d_%H_%M_%S
logdir=/my/log/dir
0 2 * * * /my/command/path/mycmd param >> ${logdir}/myfile_$(${timestamp}).log
Run Code Online (Sandbox Code Playgroud)
像这样的诗句不起作用:
logfile = /my/log/dir/myfile_${timestamp}.log
Run Code Online (Sandbox Code Playgroud)
因为后者没有扩展,而是被解释为包括“${”和“}”作为字符串的一部分。
crontab
只是在文件中使用变量及其在字符串中的替换的工作示例:
CURRENT_TIME=date +%Y.%m.%d_%H:%M:%S.%3N
CURRENT_DATE=date +%Y_%m_%d
SIMPLE_VAR=the_simple_var
LOG_DIR=/var/log/cron
* * * * * /bin/echo "simple variable test! ${SIMPLE_VAR}__test!" >> "${LOG_DIR}/test.log"
* * * * * /bin/echo "complex variable test! $(${CURRENT_TIME})__test!" >> "${LOG_DIR}/test.log"
Run Code Online (Sandbox Code Playgroud)
在此 Docker 映像上进行测试(将上面的 crontab 粘贴到crontab.txt
):
FROM debian:10-slim
# Install docker (Yep, this is a docker in docker):
RUN curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
# Install CRON:
RUN apt-get update && apt-get install -y --no-install-recommends cron
# Add a crontab_config.txt task:
COPY crontab.txt /var/crontab.txt
RUN crontab /var/crontab.txt
ENTRYPOINT ["cron", "-f"]
Run Code Online (Sandbox Code Playgroud)
将其添加到 crontab 以在另一个 docker 容器内运行任何命令:
CURRENT_TIME=date +%Y.%m.%d_%H:%M:%S.%3N
CURRENT_DATE=date +%Y_%m_%d
SIMPLE_VAR=the_simple_var
LOG_DIR=/var/log/cron
* * * * * /bin/echo "simple variable test! ${SIMPLE_VAR}__test!" >> "${LOG_DIR}/test.log"
* * * * * /bin/echo "complex variable test! $(${CURRENT_TIME})__test!" >> "${LOG_DIR}/test.log"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
45262 次 |
最近记录: |