shell 并发执行任务
#!/bin/bash
# ref: https://blog.csdn.net/spch2008/article/details/51433353
token(){
pid=$
# 判断是否有传入pid
if [ -z "${pid}" ]
then
echo "please input pid"
exit
fi # 设置并发数,默认为5
concurrency=
if [ -n "$2" ]
then
concurrency=$
echo "Concurrency: $2"
fi # 创建有名管道,如果fd1不存在则创建
[ -e /tmp/fd1 ] || mkfifo /tmp/fd1
# 创建文件描述符,以可读(<)可写(>)的方式关联管道文件,这时候文件描述符999就有了有名管道文件的所有特性
# 为了让程序有一定的扩展性,不想写死fd,因而引入了变量。
# 因而引入eval命令,强制shell进行变量展开。
# eval exec "${fd}>file"简单的说,eval将右边参数整体作为一个命令,进行变量的替换,然后将替换后的输出结果给shell去执行。
eval exec "${pid}<>/tmp/fd1"
# 关联后的文件描述符拥有管道文件的所有特性,所以这时候管道文件可以删除,我们留下文件描述符来用就可以了
[ -e /tmp/fd1 ] && rm -f /tmp/fd1 # 初始化并行数
for ((i=;i<=;i++))
do
# &999代表引用文件描述符999,这条命令代表往管道里面放入了一个"令牌"
echo ${i}>&${pid}
done
} main(){
pid=
start_time=`date +%s`
# 生成管道文件
token ${pid} # 循环获取服务包名
for file_name in `ls /root/spark/dependency/*.jar|head -10`
do
# 获取令牌
read -u${pid} name
{
# 根据文件名去掉版本后缀,获得服务名
# svc_name=${file_name%0.0.1*}
# 获取启动参数
# get_para
# 执行重启
# one_restart
# 这一次命令执行到最后,把令牌放回管道
echo "pipi_num: ${name}, file_name: ${file_name}"
sleep 1
echo ${name}>&${pid}
} &
done wait
# 定义脚本运行的结束时间
stop_time=`date +%s`
echo "TIME:`expr ${stop_time} - ${start_time}`"
# 关闭文件描述符的读
eval exec "${pid}<&-"
# 关闭文件描述符的写
eval exec "${pid}>&-"
} main
shell 并发执行任务的更多相关文章
- linux shell并发执行命令
一般我们在linux上十一shell命令的批量执行操作,一般使用for或者while 循环进行操作,但是这样有一个问题,for或者while本质上是串行的,并不能,如果某一个命令执行耗费的时间比较长, ...
- 【说解】在shell中通过mkfifo创建命名管道来控制多个进程并发执行
背景: 工作中有两个异地机房需要传数据,数据全名很规范,在某个目录下命名为统一的前缀加上编号.如/path/from/file.{1..100}.而机房间的专线对单个scp进程的传输速度是有限制的,比 ...
- shell脚本并发执行
简单的并发脚本 #!/bin/bash #并发数 count= ; i < ${count}; i++ )) do { commands1 }& done #等待循环结束再执行wait后 ...
- shell 中并发执行
http://bbs.51cto.com/thread-1104907-1-1.html http://www.51testing.com/html/28/116228-238978.html htt ...
- 尝试php命令行脚本多进程并发执行
php不支持多线程,但是我们可以把问题转换成“多进程”来解决.由于php中的pcntl_fork只有unix平台才可以使用,所以本文尝试使用popen来替代. 下面是一个例子: 被并行调用的子程序 ...
- 如何实现shell并发 一个入门级可控多线程shell脚本方案
如何实现shell并发 很多人都问我如何写shell脚本,如何实现同时给三台ftp服务器上传文件,如何同时检测三台服务器是否alive等,其实这就是想实现shell的并发.那么shell并 ...
- shell script 执行常用的两种方式
2016-11-17 直接输入脚本名执行 ./script #!/bin/bash# /root/shell/001 # 2016-11-17 test for script running name ...
- SSIS Design3:并发执行
1,利用优先约束来并发处理数据,Data Flow Task 和 Data Flow Task 1 是并发执行的,而 Data Flow Task2 必须等到 Data Flow Task 和 Dat ...
- 获取Executor提交的并发执行的任务返回结果的两种方式/ExecutorCompletionService使用
当我们通过Executor提交一组并发执行的任务,并且希望在每一个任务完成后能立即得到结果,有两种方式可以采取: 方式一: 通过一个list来保存一组future,然后在循环中轮训这组future,直 ...
随机推荐
- linux如何将分组权限置为空
两种方法 方法一:使用-符号 chmod g=- monkey.py#可以单独指定一个 方法二:简写方式,用0表示 chmod 740 monkey.py#必须同时指定三个的权限
- Docker搭建ELK的javaweb应用日志收集存储分析系统
1.启动elasticsearch docker run -d --name myes -p 9200:9200 elasticsearch:2.3 2.启动kibana docker run --n ...
- 【CodeVS】1792 分解质因数
1792 分解质因数 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题目描述 Description 编写一个把整数N分解为质因数乘积的程序. 输入描述 Inp ...
- ML面试1000题系列(41-50)
本文总结ML面试常见的问题集 转载来源:https://blog.csdn.net/v_july_v/article/details/78121924 41. #include和#include“fi ...
- WPF快速入门系列(6)—— WPF资源和样式
一.引言 WPF资源系统可以用来保存一些公有对象和样式,从而实现重用这些对象和样式的作用.而WPF样式是重用元素的格式的重要手段,可以理解样式就如CSS一样,尽管我们可以在每个控件中定义格式,但是如果 ...
- Python subn函数
- JSP Web第五章整理复习 JSP访问数据库
P164 例5-1 常用SQL语句 P178 数据库连接池 (1)连接池的作用 存储多个数据库连接对象,当程序需要时,从池中获取1个连接,程序执行完成后再还给连接池.避免数据库连接建立.关闭的开 ...
- goland的下载安装破解并配置
1.下载地址:https://www.jetbrains.com/go/ 2.安装:简单 3.破解:https://www.cnblogs.com/igoodful/p/9113946.html 4. ...
- MySQL安装后设置root 密码
Mysql安装完成后初始化root 密码为空,直接回车 使用命令行: mysqladmin -u root password "123456" 来设置root密码.这里我设置的密码 ...
- SQLServer → 09:索引
一.索引概念 用途 我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法. 概念 索引是一个单独的,存储在磁盘上的数据结构,它们包含则对数据表里 ...