千家信息网

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

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要为大家展示了"脚本中怎么确保应用程序的唯一性",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"脚本中怎么确保应用程序的唯一性"这篇文章吧。一 sh
千家信息网最后更新 2026年11月04日脚本中怎么确保应用程序的唯一性

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


一 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)

测试例子:
会话一

会话二

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

文件 程序 脚本 进程 运行 函数 唯一性 应用程序 应用 内容 权限 篇文章 阻塞 成功 命令 方法 时候 模块 第一次 系统 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海喔噻互联网科技有限公司 互联网科技工作委员会主任 互联网科技行业发展 互联网科技公司的优势 北京互联网科技 有马互联网科技 唐信互联网科技 北京禾田雨橡互联网科技 广西拼得多互联网科技有限公司 卫星互联网科技股票 互联网之后的科技是什么 栖莱科技互联网股份有限公司 广州市恰铎互联网科技有限公司 为客找房互联网科技公司怎么样 美国互联网科技公司 东营紫格互联网科技 容联科技互联网电商 互联网科技新闻 上海万顺科技互联网有限公司招聘 互联网金融运营模式中的金融科技 互联网科技活动banner 互联网科技有哪些公司 翼展科技 首家互联网医院 产业互联网科技服务公司 互联网领先科技宣传片 图游互联网科技 2021世界互联网领先科技成果发布 版纳互联网科技选哪家 科技互联网公司两年变化 广西泛欧互联网科技有限公司
0