bashscript 中的 psql 退出代码 2

bashscript 中的 psql 退出代码 2

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 次)。每周一次或更少我收到一封错误消息,其中 RETCODE1 中的 psql 退出状态为 2,这是选择的结果。

来自手册页:

 2 if the connection to the server went bad and the session was not
       interactive

可能会发生这种情况,此脚本由 usercrontab 调用,同时使用不同的 myid 执行两次或更多次。第二个命令总是被调用,它执行实际工作。

我该如何缩小错误范围?错误到底是什么意思?我可以忽略它吗?

答案1

如果 psql 退出代码 2 不是太频繁,则可以忽略它,原因可能是网络或数据库健康状况。要深入了解,您可以在执行实际工作之前向脚本添加调试步骤,以显示网络连接和数据库健康状况(服务器繁忙且加载了查询)。

相关内容