我有一个非常简单的脚本,基本上运行一个命令,然后将报告通过电子邮件发送给用户:
#!/bin/bash
FROMDATE=`date -d "last week 13:00 " '+%Y-%m-%d'`
TODATE=`date '+%Y-%m-%d'`
SLOWLOG='/var/log/mysql/slow-queries.log'
REPORT='/home/user/slow.log.'$TODATE
PTQUERY='/usr/bin/pt-query-digest'
SUBJECT="Slow Query Report -- $TODATE"
EMAIL="[email protected]"
$PTQUERY --since=\'$FROMDATE\' --until=\'$TODATE\' $SLOWLOG > $REPORT
/usr/bin/mutt -s "$SUBJECT" "$EMAIL" < $REPORT
当我手动运行时一切都很完美(如下)
/usr/bin/pt-query-digest --since='2015-10-21' --until='2015-10-28' /var/log/mysql/slow-queries.log > /home/user/slow.log
如果我回显脚本中的行:
/usr/bin/pt-query-digest --since='2015-10-21' --until='2015-10-28' /var/log/mysql/slow-queries.log
当我运行脚本时出现错误
Invalid --since value at /usr/bin/pt-query-digest line 13562.
所以看起来它可能是带有单引号的东西?我不知道。任何帮助将不胜感激。
答案1
您正在转义脚本中的单引号,这意味着 shell 不会解释它们。这意味着pt-query-digest
获取文字字符串'2015-10-21'
而不仅仅是日期2015-10-21
。pt-query-digest
大概不知道如何处理单引号。
您应该去掉转义的单引号--since=\'$FROMDATE\'
,而只使用双引号。确保修改该行中的两种用途。