Crontab 电子邮件主题中的日期

Spi*_*or8 0 bash cron no-op

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

59 2 * * * : Backup Settings; ~/backup_settings.sh
Run Code Online (Sandbox Code Playgroud)

该过程结束时,我将收到一封主题为“备份设置...”的电子邮件。本质上,noop 函数 (:) 对“备份设置”一词不执行任何操作。我想将今天的日期添加到电子邮件主题中。自然,我尝试过

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

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

Kus*_*nda 5

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

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

man 5 crontabUbuntu 系统上:

该行的整个命令部分(直到换行符或字符)将由crontab 文件的变量中指定的 shell%执行 。命令中的百分号( ),除非用反斜杠( )转义,否则将被更改为换行符,并且第一个之后的所有数据都将作为标准输入发送到该命令。/bin/shSHELL%\%

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

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

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

(where myname is the address you'd like to send the email to).