Crontab 电子邮件主题中的日期

Date in Crontab email subject

我有一个 ubuntu 服务器,我在其中安排如下所示的 crontab 进程。

59 2 * * * : Backup Settings; ~/backup_settings.sh

在流程结束时,我将收到一封主题为 "Backup Settings ..." 的电子邮件。本质上,noop 函数 (:) 对单词 "Backup Settings" 没有任何作用。我想将今天的日期添加到电子邮件主题中。当然,我试过了

59 2 * * * : $(date +%Y%m%d) Backup Settings; ~/backup_settings.sh

但这不会生成所需的电子邮件主题,即“20180519 备份设置”。 $(...) 代码未被评估。我不想 运行 另一个具有电子邮件功能的脚本然后将调用 backup_settings.sh。有没有办法只使用 crontab 中的 Bash 命令来做到这一点?

字符%在crontab中很特殊,必须转义为\%:

59 2 * * * : $(date +\%Y\%m\%d) Backup Settings; "$HOME/backup_settings.sh"

来自 man 5 crontab 在 Ubuntu 系统上:

The entire command portion of the line, up to a newline or % character, will be executed by /bin/sh or by the shell specified in the SHELL variable of the crontab file. Percent-signs (%) in the command, unless escaped with backslash (\), will be changed into newline characters, and all data after the first % will be sent to the command as standard input.

但请注意,cron 会将 cronjob 的逐字命令作为其发送的任何电子邮件的主题,而不是扩展的命令行。

要发送带有您自己标题的电子邮件,请明确使用 mail

59 2 * * * "$HOME/backup_settings.sh" | mail -s "$(date +\%Y\%m\%d) Backup Settings" myname

(其中 myname 是您要将电子邮件发送到的地址)。