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 $0 | wc -l` if [[ $flag > 3 ]]; thenecho "有超过两个以上相同任务的进程在执行,该次任务直接退出!"exit fiwhile [[ $flag > 2 ]] doecho `date "+%Y-%m-%d %H:%M:%S"`": sleep 检测到有相同任务的进程在执行,该次任务睡眠等待30分钟!"sleep 30mflag=`ps -ef | grep $0 | wc -l` done echo `date "+%Y-%m-%d %H:%M:%S"`": working 未检测到有相同任务的进程在执行,开启本次任务!" echo "end"
Code example
转载于:https://www.cnblogs.com/husky/p/6475034.html
shell单例-处理方案相关推荐
- ASP.NET Core 注册单例方案
一个单例是没有公共构造函数的,只能通过静态的 Instance 属性获取,这是单例的标准初衷,一个单例是不想让别人调用它的构造函数的.但是 aspnetcore 中提供的 AddSingleton&l ...
- Swift中编写单例的正确方式
本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...
- Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:爱宝贝丶 my.oschina.net/zhangxufen ...
- socket可以写成单例嘛_精读《设计模式 - Singleton 单例模式》
Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...
- 在Python中创建单例
这个问题不是为了讨论是否需要单例设计模式 ,是否是反模式,还是针对任何宗教战争,而是要讨论如何以最pythonic的方式在Python中最好地实现此模式. 在这种情况下,我定义"最pytho ...
- 【Structs2】struts2单例多例以及spring整合的问题
单独的Struts2框架 1.struts2的Action默认是多实例的并非单例,也就是每次请求产生一个Action的对象,即每次访问的参数都被封装在Action的成员变量中. 2.struts2中A ...
- 原型模式coding-克隆破坏单例
我认为补这一段是非常有必要的,所以呢就给大家补了一下,对于原型模式的理解,我们想象一下,如果和单例结合起来应用的话,会怎么样呢,那这个问题,也有可能会被问到,如何破坏单例模式,那通过原型模式的克隆呢, ...
- 单例设计模式-ThreadLocal线程单例
package com.learn.design.pattern.creational.singleton;/*** 是基于ThreadLocal的* 所以必不可少要使用这个类* * 我们看一下这个类 ...
- 单例设计模式-容器单例
基于容器的单例模式,与享元模式类似,我们也可以使用容器单例模式,来管理多个单例对象,那我们通过coding,debug,讲解的方式来学习一下 package com.learn.design.patt ...
最新文章
- 剑指offer:面试题39. 数组中出现次数超过一半的数字
- html 模板引擎 热部署,springboot系列四、配置模板引擎、配置热部署
- Java面试知识点:Object类、Math类、BigDecimal类、自动装箱、拆箱
- C ++ 指针 | 指针与二维数组_5
- Ubuntu配置 PPTP 服务器端
- select标签multiple属性的使用方法
- JAVA将图片转成base64导出到word中
- 纹理特征提取(envi+python)
- Cadence Allegro修改静态铜皮为动态铜皮图文教程及视频演示
- VBA中调用Excel函数
- python输出以元音字母开头的单词_开头是元音字母的英语单词有哪些?
- http与Socket区别
- 6.4.1 借贷账户信息
- Information Gain 计算 python实现
- MATLAB实现基于BP神经网络的手写数字识别+GUI界面+mnist数据集测试
- 开源项目贡献者_如何管理开源项目的临时贡献者
- iOS——自定义cell
- 记录python下载的第三方安装包
- Tumblr炫酷的可滑动的悬浮按钮SpringFloatingActionBar
- 人脸识别APP技术开发是如何实现的?