我有一个ubuntu服务器,我在其中安排crontab进程,如下所示。
59 2 * * * : Backup Settings; ~/backup_settings.sh
在流程结束时,我会收到一封主题行"备份设置..."的电子邮件。本质上,noop函数(:)对单词" Backup Settings"没有任何作用。我想将今天的日期添加到电子邮件主题中。当然,我试过
59 2 * * * : $(date +%Y%m%d) Backup Settings; ~/backup_settings.sh
但这并不会产生所需的电子邮件主题,即" 20180519备份设置"。 $(...)代码没有评估。我不想运行另一个带有电子邮件功能的脚本,然后调用backup_settings.sh。有没有办法在crontab中使用Bash命令来完成它?
答案 0 :(得分:2)
字符%
在crontab中是特殊的,必须以\%
转义:
59 2 * * * : $(date +\%Y\%m\%d) Backup Settings; "$HOME/backup_settings.sh"
来自Ubuntu系统上的man 5 crontab
:
该行的整个命令部分,直到换行符或
%
字符,将由执行/bin/sh
或crontab文件的SHELL
变量中指定的shell。除非使用反斜杠(%
)进行转义,否则命令中的百分号(\
)将更改为 换行符,第一个%
之后的所有数据将作为标准输入发送到命令。
但请注意,cron会将cronjob的verbatim命令作为主题发送到它发送的任何电子邮件中,而不是扩展的命令行。
要发送包含您自己标题的电子邮件,请明确使用mail
:
59 2 * * * "$HOME/backup_settings.sh" | mail -s "$(date +\%Y\%m\%d) Backup Settings" myname
(其中myname
是您要将电子邮件发送到的地址。)