我的编程空间,编程开发者的网络收藏夹
学习永远不晚

脚本中怎么确保应用程序的唯一性

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

脚本中怎么确保应用程序的唯一性

这篇文章主要为大家展示了“脚本中怎么确保应用程序的唯一性”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“脚本中怎么确保应用程序的唯一性”这篇文章吧。


一  shell 脚本的解决方法
利用mkdir 的特性 创建已经存在的文件目录则会失败。程序第一次运行的时候可以创建一个 /tmp/lock文件夹,标示当前已经运行一个程序,当启动第二个程序时,mkdir /tmp/lock 便会失败。

  1. #!/bin/bash

  2. mkdir /tmp/lock

  3. if [ $? -ne 0 ];then

  4.    echo "there is  tr script running .. "

  5.    exit 1

  6. fi

  7. trap "rm -fr /tmp/lock " SIGINT SIGTERM

  8. sleep 50

  9. if [ -d  /tmp/lock ];then

  10.    rm -fr /tmp/lock

  11.    echo "rm -fr /tmp/lock"

  12. fi

注意 linux中的trap命令是防止脚本异常终止 :被kill (不是kill -9) ,crtl+c 中断 比较详细的资料 《Linux命令之trap - 在脚本中处理信号》http://codingstandards.iteye.com/blog/836588

二  python 脚本的解决方法
网上搜索python 锁定文件的时候,都会提示 fcntl 模块。Python的文件锁目前使用的是fcntl这个库,它实际上为 Unix上的ioctl,flock和fcntl 函数提供了一个接口。
fcntl模块的函数flock(file_handle, operation)
其中 file_handle 表示文件描述符,operation 指要进行的锁操作,有如下几种:
fcntl.LOCK_UN  解锁:删除floc()函数创建的锁
fcntl.LOCK_EX  排他锁:除加锁进程外其他进程没有对已加锁文件读写访问权限。
fcntl.LOCK_SH  共享锁:所有进程没有写访问权限,即使是加锁进程也没有。所有进程有读访问权限。
fcntl.LOCK_NB  非阻塞锁: 此参数意味着函数不能获得文件锁就立即返回,否则,如果使用LOCK_EX/LOCK_SH请求加锁不成功,则当前进程会等待获得文件锁。使用LOCK_NB可以在获得这个排他锁的情况下不阻塞该进程,LOCK_NB 也可以同LOCK_SH或LOCK_NB进行按位或(|)运算操作,比如fcnt.flock(file_handle,fcntl.LOCK_EX|fcntl.LOCK_NB),此时系统便不会阻塞当前的进程。
注意:
  1. 对于文件的f.close() 操作会使文件锁失效;
  2. 主进程结束后文件锁失效;
  3. flock()的LOCK_EX是"劝告锁",系统内核不会强制检查锁的状态,需要在代码中进行文件操作的地方显式检查才能生效。
测试脚本
脚本中使用is_running 函数对文件加锁,time.sleep(10) 模拟长时间执行的程序,第一次运行lock.py 成功加锁,在程序运行期间 再次运行lock.py ,获取锁时会失败,并且及时退出程序。

  1. #!/usr/bin/python2.6

  2. #coding:utf8

  3. import time

  4. import fcntl

  5. import sys

  6. def is_running(file):

  7.     lock_file=open(file,"w")

  8.     try:

  9.         fcntl.lockf(lock_file,fcntl.LOCK_EX|fcntl.LOCK_NB)

  10.         print "给文件加锁 ,请等待10s..."

  11.     except :

  12.         print '文件加锁,无法执行,请稍后运行。'

  13.         return None

  14.     return lock_file

  15. if __name__ == "__main__":

  16.     lockfile="/tmp/rsync_is_running"

  17.     a=is_running(lockfile)

  18.     if a is None :

  19.       print "lock file failed , rsync is running .quit ..."

  20.       sys.exit(0)

  21.     else :

  22.       print "lock file successed !!! "

  23.     time.sleep(10)

测试例子:
会话一
脚本中怎么确保应用程序的唯一性
会话二
脚本中怎么确保应用程序的唯一性

以上是“脚本中怎么确保应用程序的唯一性”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

脚本中怎么确保应用程序的唯一性

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

脚本中怎么确保应用程序的唯一性

这篇文章主要为大家展示了“脚本中怎么确保应用程序的唯一性”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“脚本中怎么确保应用程序的唯一性”这篇文章吧。一 shell 脚本的解决方法利用mkdir
2023-06-04

怎么实现一个基本的Vue应用程序

这篇“怎么实现一个基本的Vue应用程序”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“怎么实现一个基本的Vue应用程序”文章吧
2023-07-05

Tomcat中怎么监控应用程序的性能

在Tomcat中监控应用程序的性能可以通过以下几种方式来实现:使用Tomcat自带的管理工具:Tomcat自带了管理界面,可以查看各个应用程序的状态、请求处理情况、内存使用情况等信息,通过这些信息可以初步了解应用程序的性能情况。使用JMX(
Tomcat中怎么监控应用程序的性能
2024-03-08

怎么实现android应用程序自动化测试的批处理脚本

本篇内容介绍了“怎么实现android应用程序自动化测试的批处理脚本”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!测试平台:兼容androi
2023-06-08

Django中怎么创建一个新的应用程序

要在Django中创建一个新的应用程序,可以按照以下步骤进行操作:使用以下命令创建一个新的Django应用程序:python manage.py startapp 其中,是新建应用程序的名称。在项目的
Django中怎么创建一个新的应用程序
2024-03-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录