精华内容
下载资源
问答
  • 使用shell并行执行多个脚本

    万次阅读 2016-12-28 11:31:26
    有没有一种比较通用的并行执行多个SQL脚本的方法呢?每种数据库都提供命令行接口执行SQL语句,因此最容易想到的就是通过初始化多个并发的会话并行执行,每个会话运行一个单独的查询,用来抽取不同的数据部分。以...
      有没有一种比较通用的并行执行多个SQL脚本的方法呢?每种数据库都提供命令行接口执行SQL语句,因此最容易想到的就是通过初始化多个并发的会话并行执行,每个会话运行一个单独的查询,用来抽取不同的数据部分。以Oracle例如,假设要从订单表抽取数据,订单表已经是按月做了范围分区,分区名称是orders_jan2008、orders_feb2008等。要从订单表抽取一年的数据,可以初始化12个并发的SQL*Plus会话,每个抽取一个分区。每个会话执行的SQL脚本应该类似:
    spool order_jan.dat
    select * from orders partition (orders_jan2008);
    spool off
          这12个SQL*Plus进程将并行导出数据到12个文件。如果需要,还可以在抽取后使用操作系统命令将12个文件合并起来(如Linux的cat命令)。即使订单表没有分区,仍然可以基于逻辑条件执行并行抽取。逻辑方法是基于列值的逻辑范围,例如:
    select ... where order_date
    between to_date('2008-01-01','yyyy-mm-dd') and to_date('2008-01-31','yyyy-mm-dd');
          通过简单的shell脚本,可以从命令行接收并行度参数,使这些调用并行执行。
    #!/bin/bash  
    export NLS_LANG=american_america.AL32UTF8
    for(( i = 0; i < $1; i++ ))  
    do  
    {  
    sqlplus user1/password1 << !
    start a.sql
    exit;
    !
    cat ./result.lst >> aa.txt
    } &  
    done  
    wait  
    date
          a.sql文件内容如下:
    set echo off;
    set heading off;
    set line 1000;
    set pagesize 0;
    set numwidth 12;
    set termout off;
    set trimout on;
    set trimspool on;
    set feedback off;
    set timing off;
    
    spool result.lst
    select * from mytable;
    spool off
          脚本中使用了&符号,使得{}内的命令在后台并行执行,并将每次生成的文本文件result.lst合并到一个新的文件aa.txt中。等到循环里面的命令都结束之后才执行接下来的date命令。用这个示例说明并行执行多个SQL脚本文件(这里多次执行同一个文件a.sql,当然实际中应该是多个不同的SQL文件)。mytable表有57606行记录,如果执行两次,文件中应该有115212行记录。
    [oracle@data-01 ~]$ ./a.sh 2
    ...
    [oracle@data-01 ~]$ cat result.lst | wc -l
    57606
    [oracle@data-01 ~]$ cat aa.txt | wc -l
    115212
          换做MySQL数据库,整体思路是一样的,只要把sqlplus换成mysql客户端,再针对MySQL的语法做相应的修改即可。
          并行抽取一个复杂的SQL查询有时是可行的,尽管将一个单一查询分成多个部分可能是一个挑战。在并行模式下,协调多个独立的进程,保证一个整体一致的视图可能是非常困难的。而且所有并行技术都会使用更多的CPU和I/O资源,因此在执行任何并行抽取技术前需要评估对系统性能的影响。我们应该控制并发进程的个数,不然会影响系统其它进程的运行。
    展开全文
  • #!/bin/bash sh /etc/init.d/ec20_ppp.sh & 转载于:https://www.cnblogs.com/liushuhe1990/p/9717559.html
    #!/bin/bash
    sh /etc/init.d/ec20_ppp.sh &
    

     

    转载于:https://www.cnblogs.com/liushuhe1990/p/9717559.html

    展开全文
  • shell并行执性

    2020-09-10 16:07:18
    1、多个shell脚本并行执行运行 在目录下创建了test1.sh、test2.sh、test3.sh、test4.sh这几个shell文件,创建了run_test.sh用来执行上面几个test文件 test*.sh的内容均为: echo "this is $0" sleep 10 echo "$0 ...

    shell脚本有时会遇到并行执行问题

    1、多个shell脚本并行执行运行

    在目录下创建了test1.sh、test2.sh、test3.sh、test4.sh这几个shell文件,创建了run_test.sh用来执行上面几个test文件
    在这里插入图片描述
    test*.sh的内容均为:

    echo "this is $0"
    sleep 10
    echo "$0 end"
    

    run_test.sh的内容为:
    在命令行后面添加&可以使命令在后台运行,也就实现了并行执性

    
    file_name="
    ./test1.sh
    ./test2.sh
    ./test3.sh
    ./test4.sh
    "
    start=`date +%s`
    for file in $file_name
    do
    #增加&用于实现并发
            sh $file &
    done
    end=`date +%s`
    echo "time is $[ $end - $start ]"
    
    

    2、多个函数并行执行

    在同一个shell文件下,有时为了节省时间需要多个函数并行执行,原理同上
    创建qq.sh文件
    test1 &
    test2 &
    test3 &
    可以实现3个函数同时执行,如果需要test1、test2执行完后再执行test3,可以增加wait,wait会等前两个执行完再执行test3
    test1 &
    test2 &
    wait
    test3

    
    function test1(){
            echo "test1"
            sleep 5
            echo "end"
    }
    
    function test2(){
        echo "test2"
            sleep 5
            echo "end"
    }
    
    function test3(){
        echo "test3"
            sleep 5
            echo "end"
    }
    
    test1 &
    test2 &
    test3 &
    
    #test1 &
    #test2 &
    #wait
    #test3
    
    

    3、并行数量控制

    有时候用例或脚本数过多,直接使用&会导致一下把内存占满,用例执行时间会更长
    参考这篇博文,给出的例子中用了生产者消费者模式,例子也讲得非常清楚,地址:https://blog.csdn.net/arlingtonroad/article/details/101322665

    
    #!/bin/bash
     
    THREAD=5                       
    #声明并发线程并发个数,这个是此应用的关键,也就是设置管道的最大任务数
    TMPFIFO=/tmp/$$.fifo            
    #声明管道名称,'$$'表示脚本当前运行的进程PID
    mkfifo $TMPFIFO                
    #创建管道
    exec 5<>${TMPFIFO}             
    #创建文件标示符“5”,这个数字可以为除“0”、“1”、“2”之外的所有未声明过的字符,以读写模式操作管道文件;系统调用exec是以新的进程去代替原来的进程,但进程的PID保持不变,换句话说就是在调用进程内部执行一个可执行文件
    rm -rf ${TMPFIFO}              
    #清除创建的管道文件
     
    #为并发线程创建同样个数的占位
    for((i=1;i<=$THREAD;i++))
    do
       echo ;               
     #借用read命令一次读取一行的特性,使用一个echo默认输出一个换行符,来确保每一行只有一个线程占位;这里让人联想到生产者&消费者模型,管道文件充当消息队列,来记录消费者的需求,然后由生产者去领任务,并完成任务,这里运用了异步解耦的思想。
    done >&5                
     #将占位信息写入管道
     
    for i in `seq 1 20` 
    #从任务队列中依次读取任务
    do
            read -u5        
     #从文件描述符管道中,获取一个管道的线程占位然后开始执行操作;read中 -u 后面跟fd,表示从文件描述符中读入,该文件描述符可以是exec新开启的。
            {
                   echo $i
                   sleep 3
                   echo "$i end"
                   echo "" >&5  
     #任务执行完后在fd5中写入一个占位符,以保证这个线程执行完后,线程继续保持占位,继而维持管道中永远是50个线程数,&表示该部分命令/任务放入后台不占当前的bash,实现并行处理
            } &
    done
    wait                #等待父进程的子进程都执行结束后再结束父进程          
    exec 5>&-           #关闭fd5的管道
    
    

    打印出来的结果为:

    1
    2
    3
    4
    5
    1 结束
    2 结束
    3 结束
    6
    5 结束
    4 结束
    7
    8
    9
    10
    7 结束
    9 结束
    6 结束
    8 结束
    10 结束
    11
    12
    13
    14
    15
    11 结束
    12 结束
    16
    13 结束
    14 结束
    17
    15 结束
    18
    19
    20
    16 结束
    17 结束
    19 结束
    20 结束
    18 结束
    
    
    展开全文
  • 测试文件 ... 每test.php代码如下,...以下是shell脚本:注意关键点: 在耗材的脚本地方加上 大括号,必须换行,最后加一&, 如果不加,则要等50秒,才能输出10y 如果加上大括号及&,5秒钟即可输出1...

    测试文件

    test1.php-->test10.php

    每个test.php代码如下,延时5秒,然后输出y

    <?php
        sleep(5);
        echo 'y';
    ?>

    以下是shell脚本:注意关键点: 在耗材的脚本地方加上 大括号,必须换行,最后加一个&,

    如果不加,则要等50秒,才能输出10个y

    如果加上大括号及&,5秒钟即可输出10个y

    #!/bin/bash
    
    maxnum=5
    flag=1
    while(( $flag<$maxnum ))
    do
      url="http://192.168.1.20/test/test${flag}.php"
      {
            curl $url
      }&
      let "flag++"
    done

     

    展开全文
  • 如果启用了多个并行的进程,可能会有资源分配上的问题。比如下面有10个表,100代表预计的时间为100分钟。 table1 100 table2 90 table3 90 table4 80 table5 80 table6 70 table7 60 table8 60 table...
  • shell 并行运行。

    2014-03-10 10:11:00
    我实在是太喜欢这个方法了。爽歪歪。 原帖 ...利用 xargs -P 的参数 ,并发运行,当然有些命令可以接收多个参数,这时候要用-n 设置最大接受参数。 seq 10 20|xargs -n 1 -P 5 sleep 就是了。 ...
  • 效果截图
  • 在数据迁移中,可能有成百上千表,有些表很大,有些表又很小。ksh appendata.sh $tab_name >> $logfile echo $1se...
  • 一个简单的 shell 脚本,用于将 SSH 命令并行广播到多个主机。 需要 。 用法 Usage: pssh.sh [-nh] [-f HOSTLIST_FILE] [-l LOGFILE] [-s SSH_OPTIONS] [-p PARALLEL_OPTIONS] COMMAND ... Runs COMMAND over ...
  • 本发明公开了一种限制shell...概念,利用linux 的管道,实现并行执行的多个进 程进入临界区时的“串行化”,利用单独的死锁检 测脚本,来检测死锁,没有多个并发进程对同一个 令牌进行操作,可以有效地解决死锁的问题。
  • 上周组里同学给了一数据任务: 1.在hive上传汽车词包 2.根据汽车词包圈出指定时间段内的cookie 3.根据cookie找出这些用户的所有搜索记录 4.从所有搜索数据中找到含有明星的搜索记录 5.根据每明星group by,...
  • 现要对其并行调参,由于是在linux下,当然选择shell啦,很简易的需求,由于菜搞了半天才搞运行,代码设计美感毫无。shell小白可以参考,大神还请帮我解答问题:如何将调用py文件的输出保存为变量?真心求解,望...
  • Shell-使用&和wait让你的脚本并行执行

    万次阅读 多人点赞 2019-02-19 21:57:56
    假定业务上多个业务逻辑没有先后关系,每个脚本的执行时间也很长 ,推荐并行执行。 一般情况下,我们会把每个业务逻辑写到一个单独的脚本里,在服务器上逐一调用,每次都要手工去敲命令。 如果我们把这些脚本放到一个...
  • 当你在一个类似批处理的脚本里启动多个shell脚本的时候,可能没有意识到shell背后的调度器会将这些脚本在多个CPU上并行执行。当同时执行的脚本访问某些共享资源(通常是文件)时,可能造成执行的结果错误,而且经常让...
  • 这使得在监视进度的同时运行多个作业变得非常容易。 tcon用途引擎盖下,你可以通过xpanes参数tcon并发限制后利用它充分利用。 用法 # Echo a line and sleep afterwards with a concurrency of 4. `-x` is passed ...
  • 在生信分析中,经常会遇到不同的重复和处理,这样的分析过程有时是非常费时且占用资源并不是很的,可以同时在后台运行以节约时间,这是并行处理的意义。除了需要并行处理,循环迭代来遍历整个文件夹的需要分析的...
  • 最近在做一系列的 docker 的镜像编译脚本时,想到能不能通过并行编译加快速度,查了一下资料,最后通过 shell 的 job control 实现了并行编译多个 docker 镜像。 具体要实现的目标包括: 处理在一个目录内的 docker...
  • 对HDFS上多个文件并行执行grep操作

    万次阅读 2016-01-12 18:44:54
    map reduce程序再执行,虽然可行,却感觉有点麻烦,没有直接使用shell命令方便灵活。经过查询和尝试,终于找到了方法。举例子,启用10进程,查询在2016年1月11日19点和20点之间的所有包含abcdefg的日志记录...
  • 并行服务控制器 Bourne Shell脚本可同时控制多个服务
  • shell脚本中使用for循环开启并行方法

    万次阅读 2018-06-01 10:31:48
    大家经常使用for循环来給指定...done把1-999不停输入diaoyong.sh脚本中,该脚本要循环999次才能执行完成,执行效率极慢,我们可以使用for循环中的并行,根据输入的参数,同时执行多个任务,但是这种会同时开启999个...
  • 最近工作接触到了一些Linux上面的文本处理,数据量还是蛮大的,不可避免的...这自然会想到,如何才能并行多线程处理文本呢,就是因为这需求,导致下面脚本程序的诞生。 multi.sh,主要工作就是次调用同一脚本处
  • 发现在写脚本的的时候有三符号都很有用一是管道命令符"|",一并行执行命令符"&",另一是“&&”  所谓管道,充当的作用就是连接管道的前后两部分。具体来说就是将管道前的命令执行的结果...
  • 对于急于看到结果的我来说,是不能容忍的,因此采用shell文件进行程序并发,每一程序处理30张,大概需要200个并行程序,希望服务器不会宕机0.0. 大体思想 通过控制文件名来控制文件数量,通过shell文件调用处理...
  • Shell——你只需要了解这么

    万次阅读 多人点赞 2018-06-30 20:34:09
    Shell是一用C语言编写的程序,通过Shell用户可以访问操作系统内核服务,类似于DOS下的command和后来的cmd.exe。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令...
  • 下面代码块实现相同任务次运行时并行实现, command + & #!/bin/bash date for i in `seq 1 5` do { echo "sleep 2" sleep 2 } & done wait ##等待所有子后台进程结束 date 在shell脚本中,不同代码...
  • 用法:parexec NUMTHREADS,其中NUMTHREADS是要并行执行... 在启动parexec之后,您的shell窗口将被水平分割成NUMTHREADS部分。 每部分都包含一命令的输出(随着命令的写得过多,该命令将滚动显示)和一状态栏。

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 235
精华内容 94
关键字:

多个shell并行