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


13

我能说......么:

MYPATH=/root/scripts  
MYSCRIPT=doit.sh

0 1 * * * $MYPATH/$MYSCRIPT

crontab -e

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

Answers:


15

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

在文档中对此进行了说明,您可以通过运行查看

man 5 crontab

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


7

刚刚尝试,是可能的。您可以通过以下简单示例弄清楚,将其放入您的crontab

FOO =质量
* * * * * echo $ FOO>〜/ out

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


2
+1以显示OP如何自行解决类似问题。
Arthaey 2012年

一个更好的示例将在目标脚本中使用$ FOO。
Acumenus 2014年

4

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

灵活性在于,可以将cron条目的命令部分传递给使用Vixie cron的系统(通常安装在Linux系统上)上/bin/sh -c的shell或使用shell定义的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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.