リモートホストから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
いくつかの潜在的な問題があります。
RC
if
サブセクションの最後のコマンドの結果ではなく、前のコマンドの成功を報告するので、常にゼロになります。if
(私の考えでは、それはあなたが欲しいと思います)- 輸出を教えてください
RC
。そのような要件はありますか? $HOSTNAME
ホスト名にはスペースは使用できないため、トピック内で引用する必要はありません。- 以下のトピックテキストは
mailx -s
全体を引用する必要があります。mailx -s "[postgres@$HOSTNAME]: SUCCESS: LaFIS_Dump_Erstellung_Ref" "${EMAIL_TO}"
- (Myは
mailx
GNUのエイリアスでmail.mailutils
あり、使用している構文には適用されません。)