亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

腳本中怎么確保應用程序的唯一性

發布時間:2021-12-20 09:41:19 來源:億速云 閱讀:140 作者:小新 欄目:開發技術

這篇文章主要為大家展示了“腳本中怎么確保應用程序的唯一性”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“腳本中怎么確保應用程序的唯一性”這篇文章吧。


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

測試例子:
會話一
腳本中怎么確保應用程序的唯一性
會話二
腳本中怎么確保應用程序的唯一性

以上是“腳本中怎么確保應用程序的唯一性”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

唐山市| 砚山县| 长岭县| 昆明市| 梅河口市| 海宁市| 咸宁市| 黄梅县| 兴城市| 桦川县| 墨江| 贵阳市| 唐山市| 会宁县| 屏南县| 隆尧县| 邵阳县| 孟村| 淮北市| 博乐市| 福清市| 乐至县| 西盟| 社会| 长子县| 漠河县| 乳山市| 沈丘县| 潍坊市| 栖霞市| 遂川县| 左权县| 博客| 海丰县| 齐河县| 宁化县| 定襄县| 搜索| 巫溪县| 日照市| 囊谦县|