这是原始问题 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 -
非常感谢
答案 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
的完整路径。