文章目录

  • 概述
  • 常见的串行执行
  • 使用&和wait改造
  • 示例二


概述

我们知道shell中的命令都是串行执行的,如果想要充分利用服务器的资源,就需要些小技巧了。

假定业务上多个业务逻辑没有先后关系,每个脚本的执行时间也很长 ,推荐并行执行。

一般情况下,我们会把每个业务逻辑写到一个单独的脚本里,在服务器上逐一调用,每次都要手工去敲命令。

如果我们把这些脚本放到一个调用脚本里呢? 执行的时候去调用这个调用脚本,事实上linux会根据脚本中的顺序 串行去调用这些脚本,还不如自己在服务器上一个个的执行快呢,最起码手工逐个调用脚本还是并行的。


常见的串行执行

我们通过一个例子来演示下:

使用1.sh和2.sh模拟业务逻辑

[root@artisan test]# cat 1.sh
#!/bin/bash
echo "1.sh 开始执行....."
echo "模拟业务逻辑,sleep 5秒, duang duang  duang~~~"
sleep 5s
echo "1.sh 执行结束....."
[root@artisan test]# cat 2.sh
#!/bin/bash
echo "2.sh 开始执行....."
echo "模拟业务逻辑,sleep 5秒, duang duang  duang~~~"
sleep 5s
echo "2.sh 执行结束....."
[root@artisan test]# 

我们将调用脚本放到 call_serial.sh

[root@artisan test]# cat call_serial.sh
#!/bin/bash
#当前目录下执行如下脚本  相对路径
./1.sh
./2.sh
echo "继续执行剩下的逻辑..."
[root@artisan test]# 

执行call_serial.sh

call_serial.sh 可知为【串行


使用&和wait改造

  • 在每个进程中使用&符号进行让脚本在后台运行,无需等待当前进程结束。
  • 为了确保每个进程都执行完成,最后务必使用wait关键字,用来确保每一个子进程都执行完成。
[root@artisan test]# cat call_parallel.sh
#!/bin/bash
#当前目录下执行如下脚本  相对路径
./1.sh &
./2.sh &
wait
echo "继续执行剩下的逻辑..."
[root@artisan test]# 

执行下看看效果

call_parallel.sh 可知为【并行

通过上述的改造,可以大大的提高多个进程并发执行的效率。 对于可以同时执行的业务逻辑,可以充分利用主机资源,减少等待时间。


示例二

serial.sh

#!/bin/bash
beginTime=`date +%s`
num=1
for i in `seq 1 3`
doecho $i  "业务逻辑 开始执行,当前时间:" `date "+%Y-%m-%d %H:%M:%S"`sleep 2secho $i  "业务逻辑 执行完成,当前时间:" `date "+%Y-%m-%d %H:%M:%S"`echo "-----------------------------------------------------------"
done
endTime=`date +%s`
echo "总共耗时:" $(($endTime-$beginTime)) "秒"

从执行结果来看,串行,每个进程都要耗时2秒,3个进程6秒处理完成


使用&和wait关键字来改造上上述脚本,使其并行执行

parallel.sh

#!/bin/bash
beginTime=`date +%s`
num=1
for i in `seq 1 3`
do{ echo $i  "业务逻辑 开始执行,当前时间:" `date "+%Y-%m-%d %H:%M:%S"`sleep 2secho $i  "业务逻辑 执行完成,当前时间:" `date "+%Y-%m-%d %H:%M:%S"`echo "-----------------------------------------------------------"# 结尾的&确保每个进程后台执行}&
done
# wait关键字确保每一个子进程都执行完成
wait
endTime=`date +%s`
echo "总共耗时:" $(($endTime-$beginTime)) "秒"


从执行结果来看,并行,同时启动3个进程,3个进程2秒处理完成。


Shell-使用和wait让你的脚本并行执行相关推荐

  1. 通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本...

    通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本   版权声明: 本文遵循"署名非商业性使用相同方式共享 2.5 中国大陆"协议 ...

  2. shell的相关知识(变量、脚本定义)

    一.shell的相关知识: 1.对于shell编程语言大体分为:机器语言.汇编语言.高级语言 2.shell变量类型:事先确定数据的存储格式和长度 shell变量分为:字符型.数值型 数值型又分为:整 ...

  3. 企业Shell实战-MySQL分库分表备份脚本

    本文来自 http://www.xuliangwei.com/xubusi/252.html 免费视频讲解见 http://edu.51cto.com/course/course_id-5064.ht ...

  4. Linux下Dialog+Shell三层目录专业规范跳板机脚本

    #Dialog+Shell介绍 Dialog+Shell结合使用,方能体现出Dialog图形化的效果,在运维的时候,使用图形化界面,能给你一个更直观的感受,相信你会喜欢上他的 #创建脚本目录  [ro ...

  5. linux shell 语句出错自动退出 调试 检查 脚本

    许多人用shell脚本完成一些简单任务,而且变成了他们生命的一部分.不幸的是,shell脚本在运行异常时会受到非常大的影响.在写脚本时将这类问题最小化是十分必要的.本文中我将介绍一些让bash脚本变得 ...

  6. shell实例第19讲:一个脚本中调用另一个脚本的3种方法

    在Shell脚本中调用另一个脚本(3种方法) 准备:主脚本是second.sh,主脚本中调用first.sh 方法1:exec(1)执行方式:exec /home/weibo/shell_test/s ...

  7. [记录]Shell并发模式批量安装saltstack的脚本

    SaltStack+Shell: salt-master的配置:#cat /etc/salt/masteruser: rootauto_accept: Truesalt-minion的配置(支持多ma ...

  8. shell结合expect写的批量scp脚本工具

    转载链接:http://www.jb51.net/article/34005.htm expect用于自动化地执行linux环境下的命令行交互任务,例如scp.ssh之类需要用户手动输入密码然后确认的 ...

  9. shell两个时间字符串插值_Shell 脚本速成

    0x00 前言 这段时间快速把 Micropoor 的内网课程看完了一遍,里面出现了很多 Shell 脚本. Shell 脚本有什么好处? 无需安装其他软件 适合任务自动化,擅长系统管理任务 通过 S ...

  10. Shell告警系统(需求分析,告警系统主脚本,告警系统配置文件,告警系统监控项目)...

    shell项目-告警系统 1.需求分析 (虽然之前我们学习了zabbix,但有时候也不能满足我们的需求,比如比较冷门的监控项目需要写自定义脚本,或者服务器网络有问题,没有办法将客户端的数据发送到服务端 ...

最新文章

  1. JavaScript表达式--掌握最全的表达式,一切尽在掌握中,让表达不再是难事
  2. Java排序算法总结
  3. Zynq ZC702平台 QSPI + eMMC实现
  4. 用python修改文件内容修改txt内容的3种方法
  5. [zz]为 lua 封装 C 对象的生存期管理问题
  6. pycharm中使用scrapy命命
  7. JQuery播放器代理--IE下支持wma格式
  8. 【小程序】【Tips】等待服务器的反馈的定时、间隔运行的正确方法
  9. 计算机组成800H是多大,73计算机组成原理模拟题三(2019年)更新北理工20春答案...
  10. S - C语言实验——余弦
  11. ios 构建版本一直在处理中_app已审核通过,ios构建版本失败,提示此构建版本...
  12. 数据的转换(shp sde mdb 之间的转换)
  13. Zookeeper原理分析之存储结构ZkDatabase
  14. 稳压电源的设计与制作_直流稳压电源设计
  15. 鱼和熊掌兼得---STM32调试接口SW动态复用为GPIO的方法
  16. mac电脑如何装双系统Linux,苹果电脑双系统怎么装【详细教程分享】
  17. caj 服务器正在运行中,紧急求助:caj阅读器打不开
  18. Eclipse代码提示和补全
  19. 记一次IIS发布网站导致系统时常跳入登录页面的问题解决
  20. 软件测试工程师面试如何回答购物车怎么进行测试分析?

热门文章

  1. 《基于张量网络的学习入门》学习笔记3
  2. Maven如何用Eclipse创建一个Maven项目【笔记自用】
  3. 读取.bin激光雷达点云文件格式并可视化
  4. 一文深入理解协同过滤
  5. 循环神经网络的数据预处理
  6. 96. Leetcode 494. 目标和 (动态规划-背包问题)
  7. Leetcode - 169. Majority Element (多数投票问题)
  8. 删除链表的中间节点和a/b处的节点
  9. 文巾解题 176. 第二高的薪水
  10. 文计笔记 4 字符编码与数制