Назад | Перейти на главную страницу

psql код выхода 2 в сценарии bash

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 можно игнорировать, если он встречается не слишком часто, причиной может быть сеть или работоспособность базы данных. Чтобы копать больше, вы можете добавить шаги отладки в скрипт, который показывает сетевое соединение и состояние базы данных (сервер занят и загружен запросами), прежде чем выполнять настоящую работу.