我有一个shell脚本,它经常用一些参数调用。它应该构建一个查询并执行语句。如果发生错误,它应该将分开的参数写入一个文件中,以便通过再次调用该脚本来进行错误处理。
一切正常,但
问题是,我捕捉到连接被拒绝错误等,但如果由于表被锁定而无法执行语句,我不想等待超时。
我的代码:
...
mysql -u ${username} -p${password} -h ${database} -P ${port} --connect-timeout=1 --skip-reconnect -e "$NQUERY"
mysqlstatus=$?
if [ $mysqlstatus -ne 0 ]; then
echo "[ERROR:QUERY COULD NOT BE EXECUTED:$mysqlstatus: QUERY WRITTEN TO LOG]" >> ${GENLOG}
#echo ${NQUERY} >> ${FQUER}
for i in "$@"; do
ARGS="$ARGS $i|"
done
echo "${ARGS}" >> ${ARGLOG}
else
echo "[OK] $NQUERY" >> ${GENLOG}
fi
...
但是当一个表被锁定时,执行不会被取消,它会像永远一样运行。。
对我来说,在mysql服务器上设置max\语句\时间\集或任何东西都不是一个解决方案,因为我不是唯一一个使用db的人
1条答案
按热度按时间yfwxisqw1#
您可以将timeout命令与mysql一起使用
这将等待3秒mysql命令返回,如果命令运行更长时间,那么3秒超时将返回退出状态124到shell。如果你没有超时,你可以使用类似这样的作业控制。