是否可以在 crontab -e 中使用变量?

use*_*496 16 crontab ubuntu

我能说......么:

MYPATH=/root/scripts  
MYSCRIPT=doit.sh

0 1 * * * $MYPATH/$MYSCRIPT
Run Code Online (Sandbox Code Playgroud)

crontab -e

是否可以在 中使用变量crontab -e

Gil*_*il' 19

是的,您可以通过这种方式定义和使用变量。有一个限制(您在示例中没有遇到):=符号右侧的字符串按字面解释,删除了前导空格,因此您不能使用类似的结构FOO=$BAR/qux(例如,PATH=$HOME/bin:$PATH不会做任何有用的事情)。

这在文档中说明,您可以通过运行来查看

man 5 crontab
Run Code Online (Sandbox Code Playgroud)

(请注意,在手册的第 1 节中man crontab显示了crontab 命令的文档;您需要在第 5 节中提供crontab 文件格式的文档。)


cYr*_*rus 10

刚刚试了一下,是可以的。你可以用这个简单的例子弄清楚,把它放在你的crontab

FOO=qwerty
* * * * * echo $FOO > ~/out

并检查文件~/out(每分钟更新一次),它应该包含"qwerty".

  • +1 显示 OP 如何自己找出类似的东西。 (3认同)

小智 7

尽管 Linux crontabs 支持定义一些保存文字值的变量,但除了将长文本压缩为较短的表示形式或控制有关 cron 本身的一些事情(例如将电子邮件输出发送到何处)之外,它没有多大用处。

灵活性是理解 cron 条目的命令部分将被传递到使用 Vixie cron(通常安装在 Linux 系统上的系统)上的系统上/bin/sh -c定义的 shell SHELL。这意味着命令行的其余部分是一个简单的 shell 脚本。注意:了解正在使用的外壳。在 Linux/bin/sh/bin/bash$( ... )嵌入式命令通常是有效的,但它不会在/bin/sh只理解的旧系统上运行`

例如,我有一个简单的 crontab 行,它每月存档一个保存消息的 MBX 文件并对其进行压缩。它看起来像这样:

15 0 1 * *  nf=MailFeed-$( date +\%Y\%m ).mbx && cd Logs && mv MailFeed.mbx $nf && bzip2 -9 $nf
Run Code Online (Sandbox Code Playgroud)

这将在每个月的第一个上午 12:15 运行,设置一个带有 CCYYMM 的新文件名,将当前文件移动到新名称并压缩它。要记住的是,未转义的%(百分号)将被视为换行符,其后的数据将作为标准输入发送到百分号之前的命令。这就是为什么法线如此date +Y+m写的原因date +\%Y\%m