postgres 9.6 Debian GNU / Linux 9
используется следующий простой сценарий bash, который вызывается из пользовательского crontab, myid - это переданный параметр:
#!/bin/bash
...
PGPASSFILE="/home/user/.pgpass"
PGCONNECT=" psql -U myuser -w -h 000.000.000.000 -d mydatabase -p 5432"
PGCOMMAND1="SELECT something, somemmore FROM schema.table WHERE id= ${myid}"
PGRESULT=`$PGCONNECT -A -F ";" -t -c "$PGCOMMAND1"`
RETCODE1=$?
...
PGCOMMAND2="SELECT schema.functionname(${myid});"
PGRESULT=`$PGCONNECT -A -F ";" -t -c "$PGCOMMAND2"`
RETCODE2=$?
if [ $RETCODE1 -eq 0 ] && [ $RETCODE2 -eq 0 ]; then
mailx -s sendme_asuccessemail
else
echo -e "ret1: $RETCODE1\n" >> $MAIL_FILE
echo -e "ret2: $RETCODE2\n" >> $MAIL_FILE
mailx -s sendme_errormailwith retcode1=2
fi
и в большинстве случаев все в порядке (сценарий запускается 60 раз в день в разное время). раз в неделю или реже я получаю сообщение об ошибке со статусом выхода 2 psql в RETCODE1 в результате выбора.
из справочной страницы:
2 if the connection to the server went bad and the session was not
interactive
может случиться так, что этот скрипт вызывается для каждого usercrontab, и он выполняется дважды или более одновременно с разными myid. Всегда вызывается вторая команда, которая выполняет реальную работу.
Как я могу сузить ошибку? Что на самом деле означает ошибка? Могу я игнорировать это?
Код выхода 2 psql можно игнорировать, если он встречается не слишком часто, причиной может быть сеть или работоспособность базы данных. Чтобы копать больше, вы можете добавить шаги отладки в скрипт, который показывает сетевое соединение и состояние базы данных (сервер занят и загружен запросами), прежде чем выполнять настоящую работу.