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++ 中类似的常 ...
随机推荐
- HTMLTestRunner 异常输出中文乱码
1.在代码中加入下面的代码并保存: # -.- coding:utf-8 -.- import sys reload(sys) sys.setdefaultencoding('utf-8') 2.找到 ...
- 【leetcode】118. Pascal's Triangle
@requires_authorization @author johnsondu @create_time 2015.7.23 19:54 @url [Pascal's Triangle](http ...
- java.lang.IllegalArgumentException: Request header is too large的解决方法
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout=&q ...
- 快速搭建一个成熟,强壮的App框架【转载】
App框架搭建 招聘信息: iOS 研发工程师 iOS开发工程师 iOS开发实习工程师 新浪微博-Android开发工程师&iOS开发工程师 美术设计师(2D) UI设计师 cocos2dx手 ...
- 【Atheros】minstrel速率调整算法源码走读
先说几个辅助的宏,因为内核不支持浮点运算,当然还有实现需要,minstrel对很多浮点值做了缩放: /* scaled fraction values */ #define MINSTREL_SCAL ...
- Windows server2008 搭建ASP接口訪问连接oracle数据库全过程记录
真的是太不easy了,曾经的时候在window server 2003上面搭建了一套asp+oracle的接口系统.就费了好大的劲儿,事实上那会迷迷瞪瞪的也不知道怎么的就弄好了,也懒得管了.OK,从昨 ...
- Java多线程之~~~~synchronized 方法
在多线程开发中,总会遇到多个在不同线程中的方法操作同一个数据,这样在不同线程中操作这个数据不同的顺序 或者时机会导致各种不同的现象发生,以至于不能实现你预期的效果,不能实现一致性,这时候就能够使用 s ...
- WPF 自定义快捷键命令(COMMAND)(转)
命令简介 WPF 中的命令是通过实现 ICommand 接口创建的.ICommand 公开两个方法(Execute 及 CanExecute)和一个事件(CanExecuteChanged).Exec ...
- python+pip+adb
最近开始玩python,用它写一些小程序游戏的辅助,现在做下总结 下面进入正文. 本文适用对象为WIN10系统,安卓用户.目的在于让丝毫没有接触过Python的小伙伴都能成功运行,如果你恰好是这样的对 ...
- EasyDSS视频点播服务器实现的多码率点播功能的说明
EasyDSS流媒体音视频直播与点播服务器软件,是一套提供一站式的转码.点播.直播.检索.回放.录像下载服务的高性能RTMP/HLS/HTTP-FLV流媒体服务,极大地简化了流媒体相关业务的开发和集成 ...