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单例-处理方案相关推荐

  1. ASP.NET Core 注册单例方案

    一个单例是没有公共构造函数的,只能通过静态的 Instance 属性获取,这是单例的标准初衷,一个单例是不想让别人调用它的构造函数的.但是 aspnetcore 中提供的 AddSingleton&l ...

  2. Swift中编写单例的正确方式

    本文由CocoaChina译者leon(社区ID)翻译自krakendev 原文:THE RIGHT WAY TO WRITE A SINGLETON 转载请保持所有内容和链接的完整性. 在之前的帖子 ...

  3. Redis单例、主从模式、sentinel以及集群的配置方式及优缺点对比

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:爱宝贝丶 my.oschina.net/zhangxufen ...

  4. socket可以写成单例嘛_精读《设计模式 - Singleton 单例模式》

    Singleton(单例模式) Singleton(单例模式)属于创建型模式,提供一种对象获取方式,保证在一定范围内是唯一的. 意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 其实单例模 ...

  5. 在Python中创建单例

    这个问题不是为了讨论是否需要单例设计模式 ,是否是反模式,还是针对任何宗教战争,而是要讨论如何以最pythonic的方式在Python中最好地实现此模式. 在这种情况下,我定义"最pytho ...

  6. 【Structs2】struts2单例多例以及spring整合的问题

    单独的Struts2框架 1.struts2的Action默认是多实例的并非单例,也就是每次请求产生一个Action的对象,即每次访问的参数都被封装在Action的成员变量中. 2.struts2中A ...

  7. 原型模式coding-克隆破坏单例

    我认为补这一段是非常有必要的,所以呢就给大家补了一下,对于原型模式的理解,我们想象一下,如果和单例结合起来应用的话,会怎么样呢,那这个问题,也有可能会被问到,如何破坏单例模式,那通过原型模式的克隆呢, ...

  8. 单例设计模式-ThreadLocal线程单例

    package com.learn.design.pattern.creational.singleton;/*** 是基于ThreadLocal的* 所以必不可少要使用这个类* * 我们看一下这个类 ...

  9. 单例设计模式-容器单例

    基于容器的单例模式,与享元模式类似,我们也可以使用容器单例模式,来管理多个单例对象,那我们通过coding,debug,讲解的方式来学习一下 package com.learn.design.patt ...

最新文章

  1. 剑指offer:面试题39. 数组中出现次数超过一半的数字
  2. html 模板引擎 热部署,springboot系列四、配置模板引擎、配置热部署
  3. Java面试知识点:Object类、Math类、BigDecimal类、自动装箱、拆箱
  4. C ++ 指针 | 指针与二维数组_5
  5. Ubuntu配置 PPTP 服务器端
  6. select标签multiple属性的使用方法
  7. JAVA将图片转成base64导出到word中
  8. 纹理特征提取(envi+python)
  9. Cadence Allegro修改静态铜皮为动态铜皮图文教程及视频演示
  10. VBA中调用Excel函数
  11. python输出以元音字母开头的单词_开头是元音字母的英语单词有哪些?
  12. http与Socket区别
  13. 6.4.1 借贷账户信息
  14. Information Gain 计算 python实现
  15. MATLAB实现基于BP神经网络的手写数字识别+GUI界面+mnist数据集测试
  16. 开源项目贡献者_如何管理开源项目的临时贡献者
  17. iOS——自定义cell
  18. 记录python下载的第三方安装包
  19. Tumblr炫酷的可滑动的悬浮按钮SpringFloatingActionBar
  20. 人脸识别APP技术开发是如何实现的?

热门文章

  1. KVC、KVO、通知
  2. SDR、DDR、QDR存储器的比较
  3. Word中分节符的作用
  4. pytorch 数据加载为python提供了cpu全速跑跑其他任务的能力
  5. python 网络聊天服务端
  6. Python基本数据类型之元组
  7. PHP生成PDF并转换成图片爬过的坑
  8. Fastq-dump:我的日常命令
  9. python 调用shell命令的方法
  10. LeetCode 简要日记 455 104