bash实现多进程运行
之前一段时间,发现线上日志服务器总是会突然丢失日志,碰到问题时搞的很被动。联系运维同学,又总是被往后推(后来看了一下日志归档脚本,运维同学写的bug)。索性自己写了一个脚本,添加到crontab任务中,替换运维同学的脚本。
线上服务器每天大概产生6000-10000个日志文件(部分级别的日志),每个文件99m。压缩时考虑到尽可能多保留日志,gzip设置的9,压缩比最大、但是最慢的压缩算法。如果以单个进程来慢慢压缩、按天归档,日志较多时,一天都归不完。所以肯定要多个进程压缩。
bash中,把任务放到后台运行就可以实现『多进程』。不过,线上服务器不能影响到其它服务运行,必须限制进程个数,所以用了一个令牌池来限制进程数。
#!/bin/bash
date=`date -d '2 days ago' +%Y-%m-%d`
declare -a files
files=`find /data1/error/error-${date}_* -type f`
Npro=10 #并行10个子进程压缩
Pfifo="/tmp/$$.fifo"
mkfifo $Pfifo # 新建一个fifo类型的文件
exec 6<>$Pfifo # 将fd 6指向该文件
rm -f $Pfifo
for((i=1; i<=$Npro; i++)); do
echo
done >&6 # 在fd 6指向的文件中放置$Npro个回车符,作为令牌
for file in $files
do
read -u6 #从fd 6中读出减去一个回车符,然后向下执行
#如果fd 6中没有回车符了,进程阻塞在这儿
{
gzip -9 $file
mv $file.gz /data1/error/$date/
echo >&6 #向fd6加上一个回车符
} & #花括号体内的程序后台运行
done
wait
exec 6>&- #关闭fd6
wait命令表示等待前面的后台任务全部完成后才继续往下执行。
bash实现多进程运行的更多相关文章
- [C++]Linux之多进程运行代码框架
声明:如需引用或者摘抄本博文源码或者其文章的,请在显著处注明,来源于本博文/作者,以示尊重劳动成果,助力开源精神.也欢迎大家一起探讨,交流,以共同进步- 0.0 多进程代码框架示例 /* @url: ...
- Pytest系列(30)- 使用 pytest-xdist 分布式插件,如何保证 scope=session 的 fixture 在多进程运行情况下仍然能只运行一次
如果你还想从头学起Pytest,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1690628.html 背景 使用 pytest-xdis ...
- 使用sh运行bash脚本的奇怪问题
在同一个文件夹下有两个脚本.a.sh和b.sh,脚本内容例如以下: a.sh: echo "test for a" source b.sh b.sh: echo "tes ...
- Bash脚本实现批量作业并行化
http://jerkwin.github.io/2013/12/14/Bash%E8%84%9A%E6%9C%AC%E5%AE%9E%E7%8E%B0%E6%89%B9%E9%87%8F%E4%BD ...
- 【转】Bash脚本实现批量作业并行化
首先附上自己常用的代码 ---------------------------------------------------------------------------------------- ...
- BASH的保护性编程技巧
BASH的保护性编程技巧 shell常用逻辑判断 -b file 若文件存在且是一个块特殊文件,则为真 -c file 若文件存在且是一个字符特殊文件,则为真 -d file 若文件存在且是一个目 ...
- 服务器CGI运行机制
CGI概括: 定义 通用网关接口(Common Gateway Interface)是HTTP服务器与你的或其它机器上的程序进行"交谈"的一种工具,其程序须运行在网络服务器上. 功 ...
- React-Native运行知乎日报遇到的问题
研究几天RN(React-Native)后,跟着官方的demo做了一下电影图片显示的那个,但是总感觉官方的demo欠缺点什么,所以找来找去找到了RN版的知乎日报,话说知乎日报什么版的都有,不信你们上网 ...
- 编写运行R脚本
1.在后台运行R 1.1 创建file.R文件 1.2 在文件首行键入: #! /path/to/Rscript 1.3 在下面的行中,键入R代码 1.4 保存(记得有png(),jpeg(),... ...
随机推荐
- php实现兼容Unicode文字的字符串大写和小写转换strtolower()和strtoupper()
前言 网上流传着这么一个腾讯笔试题: PHP的strtolower()和strtoupper()函数在安装非中文系统的server下可能会导致将汉字转换为乱码,请写两个替代的函数实现兼容Unicode ...
- 影响stm32仿真的因素
可能是因为电池电量不足??? 电量不足可能会妨碍SD卡的挂载
- 【Redis学习】:Windows环境下的Redis安装与配置
Redis简介 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. Redis是一个开源的使用ANSI C ...
- ios开发核心动画五:转场动画
#import "ViewController.h" @interface ViewController () @property (weak, nonatomic) IBOutl ...
- php实现求最小的k个数(日常出错很容易是分号或者$符号忘记写了)
php实现求最小的k个数(日常出错很容易是分号或者$符号忘记写了) 一.总结 日常出错很容易是分号或者$符号忘记写了 二.php实现求最小的k个数 题目描述 输入n个整数,找出其中最小的K个数.例如输 ...
- Mysql 安装(Using Generic Binaries)
本次 Mysql 为Community 5.6.21 版本号.安装方式为通用Linux安装方式.即大多数Linux平台都能够採用该方式进行安装. 一.安装步骤 1.安装环境 1)Centos 7.0. ...
- css样式继承规则详解
css样式继承规则详解 一.总结 一句话总结:继承而发生样式冲突时,最近祖先获胜(最近原则). 1.继承中哪些样式不会被继承? 多数边框类属性,比如象Padding(补白),Margin(边界),背景 ...
- Android接口安全 - RSA+AES混合加密方案
转载请注明出处: http://blog.csdn.net/aa464971/article/details/51034462 本文以Androidclient加密提交数据到Java服务端后进行解密为 ...
- Redis内存管理的基石zmallc.c源代码解读(一)
当我第一次阅读了这个文件的源代码的时候.我笑了,忽然想起前几周阿里电话二面的时候,问到了自己定义内存管理函数并处理8字节对齐问题. 当时无言以对,在面试官无数次的提示下才答了出来,结果显而易见,挂掉了 ...
- 76个值得你注意的erlang编程习惯
http://www.tuicool.com/articles/ZNzuyu 前言 学习Erlang的时候在书的留白处随手记录了一些东西,还有一些记录在了demo的注释里面,今天抽时间整理出来了一部分 ...