Bash Crontab电子邮件主题中的日期

Bash Crontab电子邮件主题中的日期,bash,cron,noop,Bash,Cron,Noop,我有一个ubuntu服务器,在那里我安排crontab进程,如下所示 59 2 * * * : Backup Settings; ~/backup_settings.sh 在流程结束时,我将收到一封主题为“备份设置…”的电子邮件。从本质上讲,noop函数(:)与“备份设置”一词无关。我想在电子邮件主题中添加今天的日期。当然,我试过了 59 2 * * * : $(date +%Y%m%d) Backup Settings; ~/backup_settings.sh 但这不会产生所需的电子邮件

我有一个ubuntu服务器,在那里我安排crontab进程,如下所示

59 2 * * * : Backup Settings; ~/backup_settings.sh
在流程结束时,我将收到一封主题为“备份设置…”的电子邮件。从本质上讲,noop函数(:)与“备份设置”一词无关。我想在电子邮件主题中添加今天的日期。当然,我试过了

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"
从Ubuntu系统上的
man 5 crontab

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

但是请注意,cron将把cronjob的逐字逐句命令作为主题放在它发送的任何电子邮件中,而不是扩展的命令行中

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

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

(其中
myname
是您希望发送电子邮件的地址)。

字符
%
在crontab中是特殊的,必须转义为
\%

59 2 * * * : $(date +\%Y\%m\%d) Backup Settings; "$HOME/backup_settings.sh"
从Ubuntu系统上的
man 5 crontab

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

但是请注意,cron将把cronjob的逐字逐句命令作为主题放在它发送的任何电子邮件中,而不是扩展的命令行中

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

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

(其中
myname
是您希望发送电子邮件的地址)。

根据您的建议,我在电子邮件主题中获得以下内容:Cron:$(日期+%Y%m%d)备份设置;$HOME/backup\u settings.sh。因此命令会运行,但日期仍然不会出现在主题中。@Spinor8是的,因为cron将执行的命令放入主题中。据我所知,无法从cron作业中更改该命令。根据您的建议,我在电子邮件主题中获得以下内容:cron:$(日期+%Y%m%d)备份设置$HOME/backup_settings.sh。因此,命令会运行,但日期仍然不会出现在主题中。@Spinor8是,因为cron将执行的命令放入主题中。据我所知,没有办法从cron工作中改变这一点。