如何使用带有日期戳的bash脚本将crontab作业添加到crontab?

时间:2019-06-01 19:15:43

标签: bash cron

这是原始问题 How to add a crontab job to crontab using a bash script?

 #!/bin/bash
cronjob="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$cronjob" ) | crontab -u userhere -

如果我尝试在bash下面使用命令bash正在导入命令并替换(日期+ \%H _ \%M-\%d。\%m。\%Y在导入的日期和时间,我会看到导入的命令带有固定日期戳的.... / mysql / 21_18-27.05.2019_dbbackup.sql.gz

有什么办法可以保持导入公式的日期?

cronjob="05 21 * * * /usr/bin/mysqldump -u mysqluserhere -pmysqlpassword DBname | gzip > /path/to/mysql/$(date +\%H_\%M-\%d.\%m.\%Y)_dbbackup.sql.gz" (crontab -u userhere -l; echo "$cronjob" ) | crontab -u userhere -

非常感谢

2 个答案:

答案 0 :(得分:0)

您可以

a)像这样在路径中转义$:

    /path/to/mysql/\$(date +\%H_\%M-\%d.\%m.\%Y)_dbbackup.sql.gz

通过这种方式,“ $(date ...)将最终显示在cron选项卡中

b)将整个命令放入一个shellscript(file),然后从cronjob中执行该文件

答案 1 :(得分:0)

在字符串周围使用单引号而不是双引号将防止外壳插入任何内容。

至少要在变量分配周围切换为单引号:

cronjob='05 21 * * * /usr/bin/mysqldump -u mysqluserhere -pmysqlpassword DBname | gzip > /path/to/mysql/$(date +\%H_\%M-\%d.\%m.\%Y)_dbbackup.sql.gz'
(crontab -u userhere -l; echo "$cronjob" ) |
crontab -u userhere -

当然,只使用一次的变量毫无意义。

(crontab -u userhere -l
 echo '05 21 * * * /usr/bin/mysqldump -u mysqluserhere -pmysqlpassword DBname | gzip > /path/to/mysql/$(date +\%H_\%M-\%d.\%m.\%Y)_dbbackup.sql.gz' ) |
crontab -u userhere -

您可能也不需要指向mysqldump的完整路径。