2013-03-20 58 views
2

如果cron時間表是每1分鐘,但cron時間的長度是10分鐘,會發生什麼情況?如果cron時間表爲1分鐘且cron運行時間爲10分鐘,會發生什麼情況?

cron: 
- description: test for cron length of 10 min 
    url: /test 
    schedule: every 1 minutes 

第一測試被稱爲00:00:00,它會在零點10分00秒

第二次測試被稱爲在0點01分00秒,它會在〇點11分完成完成: 00

....

這是會發生什麼事?還是僅在第一個測試工作完成後纔會調用第二個測試?

+1

根據[這個答案] (http://stackoverflow.com/questions/3139842/code-for-stopping-the-overlapping-of-the-cron-job),它們重疊 - 這是有道理的。 – Jesse 2013-03-20 11:40:49

+0

如果它們會互相干擾,那麼在啓動時,cron任務應該確定另一個實例是否正在運行,如果是,則立即退出。你可以用'ps'或文件標誌來做到這一點。 – halfer 2013-03-20 12:46:57

回答

3

是的,這將會發生,您的cron會每分鐘運行一次該進程,無論該進程的執行時間如何。如果你想避免併發在你的進程中使用信號量系統(http://en.wikipedia.org/wiki/Semaphore_%28programming%29)。一個簡單的實現將包括進程檢查信號量文件,檢查該文件的最後修改時間或檢查該文件中包含的PID是否仍在運行,從而決定您的進程是應該運行還是簡單地退出。更好的實現(如果你不關心是獨立於操作系統)將使用flock(1),來獲取文件的鎖,並在每次執行腳本時檢查鎖定:

#!/bin/bash 
    # Exit on unchecked errors (can't acquire exclusive lock) 
    set -e 

    (
    # Wait for lock on /var/lock/.script.xlock (file descriptor 200) 
    flock -x 200 

    # Your code 

    ) 200>/var/lock/.script.xlock #Associate file descriptor 200 with file