shell单例-处理方案
shell单例:当某一个shell脚本需要重复执行时(shell定时任务 etc),为了避免多个相同任务之间交叉,造成数据的混乱或者错误,需要脚本单例执行。
就是前一个进程执行时,后一个进程需要阻塞等待前一个执行完毕。
现在有思路如下:
1. 判断上一个进程是否正在运行法。
该方法首先需要存储前一个执行的进程ID,后面的进程在执行时先判断前一个进程是否正在执行(如果没有,说明执行结束)。如果正在执行,当前线程进入阻塞等待。

该方法需要存储上一个线程的pid
每次执行新的线程时,判断上一个线程是否正在执行,如果正在执行,则等待,如果没有,则继续运行。
运行时,先将当前线程的pid写入文件,然后执行。
该方法类似于系统中/var/run/下面的文件的使用。
http://www.cnblogs.com/husky/p/6422001.html
2. 判断同名线程数量法
在一个线程启动之前,判断该线程的同名线程的数量,如果达到2个,则表示已有相同线程正在执行,那么新的线程需要进行阻塞。
如果同名线程数量超过2个,表示有一个正在运行的线程,还有n个阻塞的线程(这边会形成循环阻塞,需要处理)
流程如下:

缺陷,使用的是进程的名称进行判定(不具备唯一性)特别严谨的情况下不适合使用,但逻辑实现比较简单。
#!/bin/bash
flag=`ps -ef | grep $ | wc -l`
if [[ $flag > ]]; then
echo "有超过两个以上相同任务的进程在执行,该次任务直接退出!"
exit
fi while [[ $flag > ]]
do
echo `date "+%Y-%m-%d %H:%M:%S"`": sleep 检测到有相同任务的进程在执行,该次任务睡眠等待30分钟!"
sleep 30m
flag=`ps -ef | grep $ | wc -l`
done
echo `date "+%Y-%m-%d %H:%M:%S"`": working 未检测到有相同任务的进程在执行,开启本次任务!"
echo "end"
Code example
shell单例-处理方案的更多相关文章
- effectivejava(破坏单例)
以下代码是最普通的双重锁的单例实现形式 package com.edu.character02; import java.io.Serializable; /** * <p> * 双重锁 ...
- objc单例的两种安全实现方案
所有转出博客园,请您注明出处:http://www.cnblogs.com/xiaobajiu/p/4122034.html objc的单例的两种安全实现方案 首先应该知道单例的实现有两大类,一个是懒 ...
- 《连载 | 物联网框架ServerSuperIO教程》- 8.单例通讯模式开发及注意事项
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- 我心中的核心组件(可插拔的AOP)~第十五回 我的日志组件Logger.Core(策略,模版方法,工厂,单例等模式的使用)
回到目录 之前的讲过两篇关于日志组件的文章,分别是<第一回 日志记录组件之自主的Vlog>和<第三回 日志记录组件之log4net>,而今天主要说一下我自己开发的另一种日志 ...
- 单例(Singleton)模式
最简单的单例「饿汉式」 public class Singleton{ private static Singleton instance=new Singleton(); //other f ...
- iOS开发:XCTest单元测试(附上一个单例的测试代码)
测试驱动开发并不是一个很新鲜的概念了.在我最开始学习程序编写时,最喜欢干的事情就是编写一段代码,然后运行观察结果是否正确.我所学习第一门语言是c语言,用的最多的是在算法设计上,那时候最常做的事情就是编 ...
- iOS页面间传值的方式(NSUserDefault/Delegate/NSNotification/Block/单例)
iOS页面间传值的方式(NSUserDefault/Delegate/NSNotification/Block/单例) 实现了以下iOS页面间传值:1.委托delegate方式:2.通知notific ...
- 从一个简单的Java单例示例谈谈并发
一个简单的单例示例 单例模式可能是大家经常接触和使用的一个设计模式,你可能会这么写 public class UnsafeLazyInitiallization { private static Un ...
- OC中两种单例实现方式
OC中两种单例实现方式 写在前面 前两天探索了一下C++ 的单例,领悟深刻了许多.今天来看看OC中的单例又是怎么回事.查看相关资料,发现在OC中一般有两种实现单例的方式,一种方式是跟C++ 中类似的常 ...
随机推荐
- nightwatchjs --Expect element to not include text
to have NightWatch to find text in a div. browser.assert.containsText('#output', 'find me') But how ...
- 在SDL中显示GBK点阵汉字
大家注意到没有,RA2的中文版本使用的是GBK点阵字库,这样做有一个好处:不管玩家是用的简体还是繁体都能识别显示的文字. GBK的意思大概是“国家标准汉字扩展字符集”吧,记不清了.但它的确是个好东东, ...
- FP Tree算法原理总结(转载)
FP Tree算法原理总结 在Apriori算法原理总结中,我们对Apriori算法的原理做了总结.作为一个挖掘频繁项集的算法,Apriori算法需要多次扫描数据,I/O是很大的瓶颈.为了解决这个问题 ...
- Crashing Robots - poj 2632
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8352 Accepted: 3613 Description In ...
- CP936 转换成 UTF-8
最近写了一个抓取脚本,抓取的大部分内容正常,但少部分乱码 检测字符编码,得出的结果是CP936 mb_detect_encoding($str, 'GBK, gb2312, GB18030, ISO- ...
- mysql case then 语句
- <mark>元素----黄色背景
当需要引用其他人的内容,或者想要重点标注一段文本时可以使用<mark>元素.这样浏览器会给<mark>中的文本添加黄色背景. 效果图如下:原文:HTML5 - 使用<m ...
- 【BZOJ2728】[HNOI2012]与非 并查集+数位DP
[BZOJ2728][HNOI2012]与非 Description Input 输入文件第一行是用空格隔开的四个正整数N,K,L和R,接下来的一行是N个非负整数A1,A2……AN,其含义如上所述. ...
- 体验DNN演示平台《A Neural Network Playground》(一)
0 本次博客内容简介 本次博客标(一),是因为我自知有些地方还是不理解.本篇博客仅暂时记录第一次玩 A Neural Network Playground的体验,如果后面有了进一步体会,会更新新的内容 ...
- Kerberos Ticket管理
Kerberos Ticket管理 本章介绍如何管理您的Kerberos Ticket,这里的Ticket是指Ticket-Granting-Ticket(TGT),是您访问集群中服务的凭证.我们假设 ...