• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            colorful

            zc qq:1337220912

             

            crontab防止腳本周期內未執行完重復執行

            個人體會: flock -xn my.lock commond
            my.lock是一個文件,應該可以是任意文件,可以新建一個空文件
            當flock 獲得鎖后就會執行后面的 commond
            測試過程: $1: flock -xn my.lock sleep 20
                          $2: flock -xn my.lock ls
            只有當1返回后, 2的ls才會成功

            crontab防止腳本周期內未執行完重復執行

            如果某腳本要運行30分鐘,可以在Crontab里把腳本間隔設為至少一小時來避免沖突。而比較糟的情況是可能該腳本在執行周期內沒有完成,接著第 二個腳本又開始運行了。如何確保只有一個腳本實例運行呢?一個好用的方法是利用lockf(FreeBSD 8.1下為lockf,CentOS  5.5下為flock),在腳本執行前先檢測能否獲取某個文件鎖,以防止腳本運行沖突。

            lockf的參數如下。

            -k:一直等待獲取文件鎖。

            -s:silent,不發出任何信息,即使拿不到文件鎖。

            -t seconds:設定timeout的時間是seconds秒,如果超過時間,則自動放棄。

            以下Crontab計劃任務執行前,需獲取臨時文件create.lock的文件鎖,此項Crontab計劃任務的內容如下:

            1
            */10 * * * * (lockf -s -t 0 /tmp/create.lock /usr/bin/python /home/project/cron/create_tab.py  >> /home/project/logs/create.log 2>&1)


            若第一個實例在10分鐘內沒有運行完,第2個實例不會運行。我以前是通過Shell腳本來解決這個問題的,比如用while...do循環,然后放在后臺執行。但后來發現其實用flock或lockf方法更為簡單。


            附上linux下的flock的用法:

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            flock (util-linux 2.13-pre7)
            Usage: flock [-sxun][-w #] fd#
                   flock [-sxon][-w #] file [-c] command...
              -s  --shared     Get a shared lock 
            #共享鎖,在定向為某文件的FD上設置共享鎖而未釋放鎖的時間內,其他進程試圖在定向為此文件的FD上設置獨占鎖的請求失敗,而其他進程試圖在定向為此文件的FD上設置共享鎖的請求會成功
              -x  --exclusive  Get an exclusive lock 
            #獨占或排他鎖,在定向為某文件的FD上設置獨占鎖而未釋放鎖的時間內,其他進程試圖在定向為此文件的FD上設置共享鎖或獨占鎖都會失敗。只要未設置-s參數,此參數默認被設置
              -u  --unlock     Remove a lock 
            #手動解鎖,一般情況不必須,當FD關閉時,系統會自動解鎖,此參數用于腳本命令一部分需要異步執行,一部分可以同步執行的情況
              -n  --nonblock   Fail rather than wait 
            #為非阻塞模式,當試圖設置鎖失敗,采用非阻塞模式,直接返回1,
              -w  --timeout    Wait for a limited amount of time
            #設置阻塞超時,當超過設置的秒數,就跳出阻塞,返回1
              -o  --close      Close file descriptor before running command
              -c  --command    Run a single command string through the shell 執行其后的comand
              -h  --help       Display this text
              -V  --version    Display version

            舉個例子執行如下腳本:

            每天23:30的時候執行一個腳本,但是執行前必須要獲得排他文件鎖,否則無法執行命令

            1
            30 23 * * * flock -xn /tmp/test.lock -c '/usr/local/php test.php'

            posted on 2013-07-06 16:59 多彩人生 閱讀(6741) 評論(0)  編輯 收藏 引用 所屬分類: linux program

            導航

            統計

            常用鏈接

            留言簿(3)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            俺来也俺去啦久久综合网| 亚洲AV无码久久| 色婷婷久久久SWAG精品| 香蕉久久夜色精品国产2020| 国产精品久久久久蜜芽| 国产精品一久久香蕉产线看| 99久久国产综合精品五月天喷水| 四虎国产精品成人免费久久| 日韩乱码人妻无码中文字幕久久 | 中文成人无码精品久久久不卡 | 久久超乳爆乳中文字幕| 99国内精品久久久久久久| 久久精品成人欧美大片| 嫩草影院久久国产精品| 亚洲中文字幕无码一久久区| 99久久国产免费福利| 亚洲精品无码久久千人斩| 国产精品久久久天天影视香蕉 | 久久夜色精品国产亚洲| 久久精品国产亚洲AV蜜臀色欲| 久久国产乱子精品免费女| 久久久久久精品免费看SSS| 国产ww久久久久久久久久| 久久99热只有频精品8| 一本色道久久综合| 亚洲伊人久久大香线蕉苏妲己| 香蕉久久av一区二区三区| 久久久这里只有精品加勒比| 精品欧美一区二区三区久久久| 国产精品一久久香蕉产线看| 亚洲人成伊人成综合网久久久| 久久这里都是精品| 午夜视频久久久久一区 | 久久精品无码一区二区三区日韩| 久久国产乱子精品免费女| 久久人人爽人人爽人人AV东京热| 亚洲欧洲久久久精品| 中文精品久久久久人妻| 久久久午夜精品福利内容| 久久久无码精品亚洲日韩京东传媒| 久久精品无码一区二区WWW|