shell多个脚本怎么并发执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell多个脚本怎么并发执行相关的知识,希望对你有一定的参考价值。

参考技术A 方法如下:

1、每个命令之间用分号隔开,各命令的执行给果,不会影响其它命令的执行,各个命令都会执行,但不保证每个命令都执行成功;

2、每个命令之间用和隔开,若前面的命令执行成功,才会去执行后面的命令。这样可以保证所有的命令执行完毕后,执行过程都是成功的;

3、每个命令之间用或隔开,只有前面的命令执行失败后才去执行下一条命令,直到执行成功一条命令为止。

Shell多线程脚本


<--目录-->

1)多线程概述

2)多线程脚本内容

3)多线程脚本执行时间

4)单线程脚本内容

5)单线程脚本执行时间


【多线程概述】

# 多线程指并发执行任务,而不是一台一台的串行来执行任务,这样可以更快且更高效的利用资源

# 我们来描述一下怎么准确控制并发数目

# 下面例子说明了一种用wait、read命令模拟多线程的一种技术技巧

# 此技巧往往用于多主机检查,比如ssh登陆、ping等等这种单进程比较慢而不耗费CPU的情况

# 还说明了多线程的控制



【多线程脚本内容】

#!/bin/bash

function a_sub {           # 此处定义一个函数,作为一个线程(子进程)

sleep 3            # 线程的作用是睡眠3秒

}

tmp_fifofile="/tmp/$$.fifo" 

mkfifo $tmp_fifofile       # 新建一个fifo类型的文件

exec 6<>$tmp_fifofile      # 将fd6指向fifo类型

rm $tmp_fifofile

thread=5                   # 此处定义线程数,我给他定义了五个线程,一会就是五个并发执行

for ((i=0;i<$thread;i++));do

echo

done >&6                   # 事实上就是在fd6中放置了$thread个回车符

for ((i=0;i<20;i++));do    # 20次循环,可以理解为20个主机,或其他

read -u6          

# 一个read -u6命令执行一次,就从fd6中减去一个回车符,然后向下执行,

# fd6中没有回车符的时候,就停在这了,从而实现了线程数量控制

{   # 此处子进程开始执行,被放到后台

a_sub && {    # 此处可以用来判断子进程的逻辑

echo "Hellow World"

} || {

echo "Hellow error"

    }

echo >&6    # 当进程结束以后,再向fd6中加上一个回车符,即补上了read -u6减去的那个

    } &

done

wait 

exec 6>&-   # 关闭df6

exit 0


【多线程脚本执行时间】

[[email protected] opt]# time sh a.sh 

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World

Hellow World


real    0m12.015s

user    0m0.002s

sys     0m0.017s


分析:

sleep 3s,线程数为5,一共循环20次,所以,此脚本一共的执行时间大约为12秒

所以一次执行五个线程,即五个主机一起执行,一共执行四次

  即:

  5×4=20,               五台主机一共循环四次

    所以 4 x 3s = 12s      一次循环所用三秒时间


【单线程脚本内容】

[[email protected] opt]# cat b.sh 

#!/bin/bash

for((i=0;i<20;i++))

do

        echo "Helloworld!!!"

        sleep 3

done


【单线程脚本执行时间】

[[email protected] opt]# time sh b.sh

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!

Helloworld!!!


real    1m0.041s

user    0m0.008s

sys     0m0.023s


结论:

多线程执行任务完成时间 12s

单线程执行任务完成时间 60s

本文出自 “wsyht的博客” 博客,请务必保留此出处http://wsyht2015.blog.51cto.com/9014030/1789475

以上是关于shell多个脚本怎么并发执行的主要内容,如果未能解决你的问题,请参考以下文章

Linux脚本学习案例shell脚本多通道并发执行存储过程

shell 一次按顺序执行多个脚本

Shell脚本中的并发

Linux下模拟多线程的并发并发shell脚本

Shell脚本中的多任务并发执行

Shell多线程脚本