我为运行多个模式的 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 进程没有运行任何转储
两件事情。
directory
格式 inpg_dump
,它并行转储(每个表 1 个线程)。所以像pg_dump -d $DB -Fd -j 5 -f $output_directory
.xargs
完全支持您想要的-P
:上面我用来
bash
包裹你的管道进行加密。xargs
将一个 arg (-L 1) 放在行尾,afterbash
和它的代码,bash 使用它 as ,这就是在这个例子中$0
它被转义的原因 。一次运行 5 个这样的命令,当一个命令结束时,只要它的标准输入上有行,它就会开始下一个命令。'
xargs