在bash中运行多个并行sqlplus连接一段时间

我有这段代码可创建20个并行sqlplus实例,并进行一些查询并退出:

   #!/bin/sh
    for i in $(seq 1 20);
    do
       echo "CREATE TABLE table_$i (id NUMber NOT NULL);
       select * from table_$i;
       ! sleep 30
       select * from table_$i;
       ! sleep 30
       DROP TABLE table_$i;" | sqlplus system/password &
    done
    wait

如果可能,我需要调整此代码,以使其在以下条件下运行一个小时:

总是保持20个连接,如果一个sqlplus实例关闭(完成了进程),另一个应打开,我需要在X时间内保持一定数量的连接。

我可以在此代码中添加任何可以满足我需要的内容吗?

hezhen2009 回答:在bash中运行多个并行sqlplus连接一段时间

要在一个小时内循环播放,请参见https://stackoverflow.com/a/22735757/3220113

runsql() {
   i="$1"
   end=$((SECONDS+3600))
   SECONDS=0
   while (( SECONDS < end )); do
      # Do what you want.
      echo "CREATE TABLE table_$i (id NUMBER NOT NULL);
            select * from table_$i;
            ! sleep 30
            select * from table_$i;
            ! sleep 30
            DROP TABLE table_$i;" | sqlplus system/password 
      sleep 1 # precaution when sqlplus fails,maybe wrong password
   done
}

for i in $(seq 1 20); do
   runsql $i &
done
wait

说明:
底部的主循环在后台启动函数runsql 20次。
函数runsql可以在任何地方使用$1,我将其复制到i以获得类似于原始代码的代码。
SECONDS是一个计数器,shell每秒更改一次,因此我们不需要调用date
3600是一个小时。
(( .. ))内部,您可以在变量前不使用$进行数学运算。

本文链接:https://www.f2er.com/3038819.html

大家都在问