デフォルトでは、コマンドを実行してからユーザーにレポートを電子メールで送信する非常に簡単なスクリプトがあります。
#!/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
スクリプトは一重引用符をエスケープしています。これはシェルがそれを解釈しないことを意味します。これは単に日付ではなくpt-query-digest
リテラル文字列を取得することを意味します。おそらく一重引用符を処理する方法がわからないようです。'2015-10-21'
2015-10-21
pt-query-digest
エスケープされた一重引用符を削除し、--since=\'$FROMDATE\'
二重引用符のみを使用してください。この行では、両方の用途を修正する必要があります。