bash 스크립트...명령의 반환 코드에 따라 이메일을 보내는 데 문제가 있습니다.

bash 스크립트...명령의 반환 코드에 따라 이메일을 보내는 데 문제가 있습니다.

원격 호스트에서 postgres 덤프를 가져오는 스크립트가 있습니다.

#!/usr/bin/bash

NOW=$(date +%F_%H%M%S)
DB_NAME='lafis'
DB_USER='postgres'
SOURCE='rd1397.rz-dvz.cn-mv.net'
DUMPDIR='/opt/db/export/postgres/dumps'
DUMPFILE="${DB_NAME}"_LaFIS_dump_prod_rd1397.dmp
EMAIL_TO='[email protected],[email protected]'
MIN_SPACE='46'

# check whether the dump_dir has minimum 51GiB free space
# stop execution, if not
if [ "$(df -h ${DUMPDIR} | awk 'NR==2 {print $4}' | sed 's/G//g')" -le "${MIN_SPACE}" ] ; then
   # hecho ; echo "   less then ${MIN_SPACE} GiB available @${DUMPDIR}. Stopping the dump for DB ${DB_NAME} now." ; echo
   echo ; echo "   less then ${MIN_SPACE} GiB available @${DUMPDIR}. Stopping the dump for DB ${DB_NAME} now." | \
   mailx -s [postgres@"${HOSTNAME}"]: ERROR: LaFIS_Dump_Erstellung_Ref "${EMAIL_TO}"
   exit
else
   # countdown 10 secs before starting the dump
   echo
   for ((i=10; i>=0; i--)); do
      # echo "   ${DUMPDIR} has $(df -h ${DUMPDIR} | tail -1 | awk {'print $4'}) of free space. taking a dump in $i seconds"
      echo "   ${DUMPDIR} has $(df -h ${DUMPDIR} | awk 'NR==2 {print $4}') GiB of free space. taking a dump in $i seconds"
      sleep 1s
   done
   sleep 10s

   # get the dumb of ${DBNAME} from ${SOURCE}
   nice pg_dump -h "${SOURCE}" -d "${DB_NAME}" -U "${DB_USER}" -v -Fd -j 2 \
   -f "${DUMPDIR}"/"${DUMPFILE}"_"${NOW}" >>  "${DUMPDIR}"/"${DUMPFILE}"_"${NOW}".out 2>&1
fi

# save return code into variable
RC=$?
export RC

# send mail for error or sucess
if [ $RC -ne 0 ]; then
   echo "ERROR: LaFIS_Dump_Erstellung_Ref ${DB_NAME} ist nicht fehlerfrei gelaufen" | \
   mailx -s [postgres@"$HOSTNAME"]: ERROR: LaFIS_Dump_Erstellung_Ref "${EMAIL_TO}"
   exit 1
else
   echo "SUCCESS: LaFIS_Dump_Erstellung_Ref ${DB_NAME} ist fertig" | \
   mailx -s [postgres@"$HOSTNAME"]: SUCCESS: LaFIS_Dump_Erstellung_Ref "${EMAIL_TO}"
fi
exit 0

이는 마지막으로 성공하거나 실패한 이메일이 전송될 때까지(if..else 부분 이후) 적용됩니다.

편집하다:pg _dump가 실행되었지만(성공한 것으로 보임) 메일이 전송되지 않았습니다.

거기에 무슨 문제가 있는지 아시나요? 처음에는 mailx 명령이 작동하기 때문에 마지막에 if..else까지 문제가 계속되지 않는 것 같습니다.

답변1

몇 가지 잠재적인 문제가 있습니다.

  1. RCif하위 절의 마지막 명령 결과가 아닌 이전 명령의 성공을 보고하므로 항상 0이 됩니다. if(내 생각엔 그게 당신이 원하는 것 같아요)
  2. 수출을 말씀하시는 건가요 RC? 그러한 요구 사항이 있습니까?
  3. $HOSTNAME호스트 이름에는 공백이 허용되지 않으므로 주제 내에서 인용할 필요가 없습니다.
  4. 아래의 주제 텍스트는 mailx -s전체를 인용해야 합니다.mailx -s "[postgres@$HOSTNAME]: SUCCESS: LaFIS_Dump_Erstellung_Ref" "${EMAIL_TO}"
  5. (My는 mailxGNU의 별칭 mail.mailutils이며 사용 중인 구문에는 적용되지 않습니다.)

관련 정보