0

我有一个 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 命令?

4

1 回答 1

4

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

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

man 5 crontabUbuntu 系统上:

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

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

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

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

myname您要将电子邮件发送到的地址在哪里)。

于 2018-05-19T10:35:31.913 回答