스크립트는 작동하지 않지만 명령은 스크립트 외부에서 작동합니다.

스크립트는 작동하지 않지만 명령은 스크립트 외부에서 작동합니다.

기본적으로 명령을 실행한 다음 사용자에게 보고서를 이메일로 보내는 매우 간단한 스크립트가 있습니다.

#!/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-21pt-query-digest

이스케이프된 작은따옴표를 제거 --since=\'$FROMDATE\'하고 큰따옴표만 사용해야 합니다. 이 줄에서 두 가지 용도를 모두 수정해야 합니다.

관련 정보