Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 在bash中运行多个并行sqlplus连接一段时间_Linux_Bash_Shell_Ssh_Sqlplus - Fatal编程技术网

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

Linux 在bash中运行多个并行sqlplus连接一段时间,linux,bash,shell,ssh,sqlplus,Linux,Bash,Shell,Ssh,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 TABL

我的代码创建了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个时间段内保持一定数量的连接


有什么我可以添加到这段代码中以实现我所需要的吗?

关于一小时内的循环,请参阅

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

创建一个以$i为参数的函数,并在该函数中以日期开始,然后使用while循环,sqlplus将一直运行到小时结束。使用&调用此函数20次,然后等待。您能给我看一个代码示例并解释它是如何工作的吗?有关此脚本的以下问题:
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