我有一个 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 命令来做到这一点?
该字符%
在 crontab 中很特殊,必须转义为\%
:
59 2 * * * : $(date +\%Y\%m\%d) Backup Settings; "$HOME/backup_settings.sh"
Run Code Online (Sandbox Code Playgroud)
在man 5 crontab
Ubuntu 系统上:
该行的整个命令部分(直到换行符或字符)将由crontab 文件的变量中指定的 shell
%
执行 。命令中的百分号( ),除非用反斜杠( )转义,否则将被更改为换行符,并且第一个之后的所有数据都将作为标准输入发送到该命令。/bin/sh
SHELL
%
\
%
但请注意,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).