真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何解決crontab在一秒內(nèi)刷新多次導致部分腳本不生效的問題

小編給大家分享一下如何解決crontab在一秒內(nèi)刷新多次導致部分腳本不生效的問題,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站設計、外貿(mào)營銷網(wǎng)站建設服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)蚌山免費做網(wǎng)站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設實現(xiàn)規(guī)模擴充和轉變。

ob在幾臺DB上發(fā)現(xiàn)crontab中的監(jiān)控任務,從來沒有執(zhí)行。但操作一下crontab的配置crontab –e + wq,監(jiān)控任務就能正常執(zhí)行,重啟cron也能正常執(zhí)行。

出問題的機器crontab的情況如下:

問題挺奇怪,第一條crontab執(zhí)行正常,第二條crontab一直沒有執(zhí)行。

第一條正常,證明cron有正常運行。DB監(jiān)控任務的crontab是凱麗系統(tǒng)自動安裝的,理論上不會存在突然出錯的情況。

問題定位:

cron出bug了? 第二個任務確實沒有執(zhí)行,還是執(zhí)行前遇到問題退出,剛好日志又打印到/dev/null了..

考慮到crontab執(zhí)行歷史在系統(tǒng)日志里會有記錄,檢查var/log/message日志如下,整*/5的分鐘點只有crontab的第一個任務。

crontab第二個任務確實沒執(zhí)行,應該是crontab出了點問題,再看看在修改crontab的那一刻發(fā)生了什么?

根據(jù)crontab最后一次修改的時間(2012-06-18 17:51:01),檢查系統(tǒng)日志如下:

剛巧,在同一秒內(nèi)修改了2次crontab。根據(jù)凱麗安裝監(jiān)控的順序,第一個crontab應該是在安裝第一條crontab任務,第二個crontab應該是在安裝第二個crontab任務。

猜想:根據(jù)cron的工作原理,難道在增加第一個任務之后,cron加載了crontab的配置(/var/spool/cron/tabs/MySQL),但是在增加第二個任務之后,cron沒有加載該配置? 如果是這樣,那么cron判斷是否需要加載配置文件的機制是如何的呢?

網(wǎng)上文檔稀少,直接看代碼。

在網(wǎng)上找到一個debian的cron源代碼: cron_3.0pl1.orig.tar.gz

解壓打開,查看cron的執(zhí)行過程:
在cron.c 的main函數(shù)中,cron的主函數(shù)代碼如下:

cron_sleep(): crontab 最小執(zhí)行單位是分鐘,因此是每60秒執(zhí)行一次.TargetTime += 60;

load_database(): 檢查crontab的配置文件是否有更新,如果有更新,則重新load,否則使用上次記錄的database cron_tick( ): 實際執(zhí)行任務查看cron是如何加載crontab的配置文件的,進入load_database()函數(shù).
database.c :

可以看到,在cron加載配置的時候,會先獲取/var/spool/cron/tabs 目錄stat信息,然后獲取用戶的crontab配置文件的stat信息,然后比較上一次統(tǒng)計的修改時間與tabs目錄、crontab配置文件的最后修改時間,如果一致則不重新load,否則重新load crontab配置文件。

stat為系統(tǒng)函數(shù)調(diào)用,該函數(shù)取得的結構體的st_mtime的單位為秒。

至此,我們可以得出這樣的結論:

由于兩次crontab修改時間均在同一秒,而cron的加載是以crontab配置文件的最后修改時間(秒級)來判斷文件是否需要更新。當出現(xiàn)以下場景,第二次對crontab的修改就會失效(不僅是增加)。

crontab失效的場景:

而這個場景,剛好是我們的DB出現(xiàn)crontab失效的情況。

crontab的刷新機制,是以crontab文件的最后修改時間為準.

因此,如果在一秒內(nèi)對crontab進行多次(大于1次)操作,就可能出現(xiàn)后修改的crontab不執(zhí)行!

當再次對crontab文件進行保存操作時,cron會重新加載配置文件,crontab生效.

解決辦法:

該問題是由于在一秒內(nèi)執(zhí)行多次crontab變更導致。因此解決辦法有3個:

  1. 在凱麗每次操作crontab的時候增加sleep 1的操作

  2. 在凱麗每次crontab操作完成之后,sleep 1,強制刷新crontab的最后更新時間

  3. 合并并行的crontab操作為一次操作,減少對crontab的操作頻率

根據(jù)凱麗的情況,選擇第二個方案對現(xiàn)有代碼改動最小。

提醒:

腳本盡量不要在同一秒內(nèi)多次操作crontab內(nèi)容,否則可能導致crontab不生效的情況。

以上是“如何解決crontab在一秒內(nèi)刷新多次導致部分腳本不生效的問題”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


網(wǎng)頁名稱:如何解決crontab在一秒內(nèi)刷新多次導致部分腳本不生效的問題
網(wǎng)站鏈接:http://weahome.cn/article/gjisgs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部