我为运行多个模式的 postgresql pg_dump 编写了这个脚本。由于完成所有操作需要很长时间,因此我通过同时运行转储来改进它:
for SCHEMA in $SCH
do
while [ $(jobs | wc -l | xargs) -ge $PROC ]; do sleep 5; done
/usr/pgsql-$PGVER/bin/pg_dump -h $PGHOST -p $PORT -U postgres -d $DB -n $SCHEMA -Fc -Z 1 2> $LOGDIR/$SCHEMA'-'$DATA'.log' | $ENCCMD $DUMPDIR/$SCHEMA'-'$DATA.bkp.enc $ENCKEY &
done
wait
所以基本上这样做是让作业的数量运行,如果大于或等于 5,它会等到进程数量减少,保持至少 5 个转储同时运行,直到完成所有模式。
问题是:有时它会卡在“while 循环”中,“jobs | wc -l”总是返回数字 5,并且检查 linux 进程没有运行任何转储