我的 crontab 中有一个命令无法正确执行,该命令应该每天在指定时间备份数据库。我尝试在终端中运行该命令,并且运行正常。
要编辑我的 crontab,我使用crontab -e
当前的 cron 选项卡,其中包含以下内容:
# Save online agent status every 2 minutes
*/2 * * * * /usr/bin/python /home/dummy/scm/qt-savu/userstatus.py >> /home/dummy/qt-savu/userstatus.log
# Save Hourly call counts every XX:59
59 * * * * /usr/bin/python /home/dummy/scm/qt-savu/hourlylog.py >> /home/dummy/qt-savu/hourlycc.log
# Backup albatross everyday
58 5 * * * /usr/bin/mysqldump -udummy -ppassword albatross | /bin/gzip > /home/dummy/Documents/backups/`/bin/date +%y.%m%d`.albatross.tar.gz
# Backup bert everyday
58 5 * * * /usr/bin/mysqldump -udummy -ppassword bert | /bin/gzip > /home/dummy/Documents/backups/`/bin/date +%y.%m%d`.bert.tar.gz
crontab 中的其他命令均正常工作,不起作用的命令是:
# Backup albatross everyday
58 5 * * * /usr/bin/mysqldump -udummy -ppassword albatross | /bin/gzip > /home/dummy/Documents/backups/`/bin/date +%y.%m%d`.albatross.tar.gz
# Backup bert everyday
58 5 * * * /usr/bin/mysqldump -udummy -ppassword bert | /bin/gzip > /home/dummy/Documents/backups/`/bin/date +%y.%m%d`.bert.tar.gz
日志输出如下
Sep 4 05:56:01 luna CRON[18815]: (dummy) CMD (/usr/bin/mysqldump -udummy -ppassword bert | /bin/gzip > /home/dummy/Documents/backups/`/bin/date '+)
Sep 4 05:56:01 luna CRON[18812]: (CRON) info (No MTA installed, discarding output)
Sep 4 05:56:01 luna CRON[18817]: (dummy) CMD (/usr/bin/mysqldump -udummy -ppassword albatross | /bin/gzip > /home/dummy/Documents/backups/`/bin/date '+)
Sep 4 05:56:01 luna CRON[18813]: (CRON) info (No MTA installed, discarding output)
正如我所观察到的,日志的输出停止在/bin/date
。
答案1
%
被 cron 特殊处理。它用于表示命令部分的结束和标准输入的开始。因此,您必须对其进行转义,如下所示:\%
。
来自 crontab 手册页:
该行的整个命令部分(直到换行符或 % 字符)将由 /bin/sh 或 crontab 文件的 SHELL 变量中指定的 shell 执行。