精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

linux定時任務如何判斷文件差異?

Q4MP_gh_c472c21 ? 來源:寫個解 ? 作者:吳解君 ? 2021-03-17 10:05 ? 次閱讀

本文能學到?busybox為例粗略跟蹤軟件執行過程方法?如何判斷文件差異?cron 對任務計劃文件要求

1. 背景

無意中瞟一眼出廠產品的日志文件 /app/recode 大小居然有9MB,按照設計每10min執行任務檢查/app/recode文件大小,該文件不會超過4MB,超過此大小則壓縮處理,僅保留最近的日志內容。立馬著手檢查linux定時任務cron運行情況。

2. 初步排查

執 crontab -e 查看定時任務配置情況,其實是以root權限打開 var/spool/cron/crontabs/root 文件,第二行是本背景該執行的腳本,乍看一下沒有任何問題。檢查 /var/log/message 看是否有被執行的記錄,“cat /var/log/message | grep cron”,干干凈凈!!!的確沒被執行。

本來事情到此為止只算工程師一個平常無奇的日常,不過10min后再查看 /app/recode 居然從9MB變成4KB,/var/log/message也有執行記錄,發生了什么?

3. 分析

為了分析具體原因,準備一新燒錄的板卡作為排查對象。懷疑方向有三個,這三方面都是引起任務計劃不被執行的誘因:crontab file格式不正確

文件系統被改寫

crontab file所屬用戶不合法

3.1. x11 crontab file 格式不正確

crontab file文件位于 var/spool/cron/crontabs/root,當使用crontab -e命令打開該文件,不做任何修改并退出,cron任務計劃能被運行。懷疑var/spool/cron/crontabs/root文件里可能包含不合法字符或語法不正確,如:文件末尾有 、 、一行里有多個空格會影響cron解析該文件。于是執行如下步驟排查:1.備份配置文件cp var/spool/cron/crontabs/root var/spool/cron/crontabs/root.bak;

2.執行crontab -e;

3.cron任務計劃是否被執行,需查看記錄watch -n 1 cat /var/log/message。

4.計算兩文件md5是否一致md5sum var/spool/cron/crontabs/root var/spool/cron/crontabs/root.bak;

結果:文件一致。

證明:“crontab file 格式不正確”不是誘因。

3.2. x12 文件系統被改寫

crontab -e雖然沒有修改var/spool/cron/crontabs/root,但無法證明它有沒有改寫文件系統其他文件。于是在一塊重新燒錄鏡像的板卡執行如下步驟排查:獲取文件系統所有文件的MD5保存為/tmp/a.txt;

find arch bin etc home lib media opt root sbin tmp usr var -name “*” | xargs md5sum 》 /unuse/a.txt

執行crontab -e;

獲取文件系統所有文件的MD5保存為/tmp/b.txt;

find arch bin etc home lib media opt root sbin tmp usr var -name “*” | xargs md5sum 》 /unuse/b.txt比較a.txt和b.txt是否一致,從而證明crontab -e是否修改文件系統內容

結果:a.txt,b.txt文件一致。 證明:“x12 文件系統被改寫”不是誘因。

3.3. x13 crontab file所屬用戶不合法

產品的cron是busybox的組件,源碼面前無秘密。開始跟蹤crond執行過程。 在busybox源碼的miscutils/crond.c添加若干 “printf(”LINE %d“, __ LINE __);”跟蹤程序運行。cron在前臺運行,執行crond -f var/spool/cron/crontabs/root; 發現947行沒有被執行,且文件指針是0;推斷:var/spool/cron/crontabs/root沒有被讀取。

跟蹤文件讀取函數load_crontab發現438行的if第二個條件不滿足,DEAMON_UID是0,只有當sbuf.st_uid也等于0時才能執行文件讀取,實際返回1000。變量sbuf.st_uid表示文件所屬用戶的UID。

?修改crontab file文件的UID和GID都是0,chown 0:0 /var/spool/cron/crontabs/root;

?重新啟動crond:crond -f var/spool/cron/crontabs/

?10min后在/var/log/message里看到任務計劃執行痕跡

Jan 10 1200 (none) cron.info crond[854]: USER root pid 3506 cmd /usr/bin/compresslog.shJan 10 1200 (none) cron.info crond[854]: USER root pid 3508 cmd /usr/local/bin/recode_check.shJan 10 1200 (none) cron.info crond[854]: USER root pid 5007 cmd /usr/local/bin/recode_check.shJan 10 1200 (none) cron.info crond[854]: USER root pid 6506 cmd /usr/local/bin/recode_check.sh結果:修改“crontab file所屬用戶”有效,任務計劃可以正常運行。 證明:“crontab file所屬用戶不合法”是誘因

4. 推斷過程

看到這個1000我已經覺察到問題根本原因,看我娓娓道來。/etc/passwd記錄linux用戶所屬UID、GID。UID=0、GID=0屬于root用戶。passwd有若干ID號,普通預設的用戶的UID、GID在1~999,adduser創建的用戶ID從1000開始,啟動crond守護進程時會根據當前用名去/var/spool/cron/crontabs/目錄下尋找與用戶名同名的文件,順帶檢查該文件的所屬用戶UID,只有文件存在、UID相同才讀取該文件。按照設想,那么crontab -e執行后應該會修改用戶所屬ID,下面是實驗步驟。再修改用戶組為 1000 “chown 1000:root /var/spool/cron/crontabs/root”

觀察crontab -e執行前后文件所屬用戶是否改變

實踐和設想一致:crontab會修改文件所屬用戶。

5. 為什么測試階段沒發現問題

我的Linux系統開發環境普通用戶編碼從1000開始,為避免使用root用戶誤操作危害開發環境,一切文件均在普通用戶環境下編輯,為有編輯權限,曾執行過 chown up /var/spool/cron/crontabs/root(不理解cron設計者為什么要去檢查文件所屬UID,即使當前已經是root權限),這個up就是我的用戶名,up的UID=1000。之所以在軟件測試階段未發現問題,原因在于任務計劃默認10min才執行一次,為縮短測試時間而修改任務計劃執行頻率,提高測試效率,修改方法就是crontab -e編輯 /var/spool/cron/crontabs/root。 當初只注重recode_check.sh執行的正確性。

原文標題:揪出元兇:linux定時任務crontab居然沒執行

文章出處:【微信公眾號:嵌入式ARM】歡迎添加關注!文章轉載請注明出處。

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11225

    瀏覽量

    208917
  • 代碼
    +關注

    關注

    30

    文章

    4744

    瀏覽量

    68345

原文標題:揪出元兇:linux定時任務crontab居然沒執行

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux計劃任務介紹

    定時備份數據。比如:11點開啟網站搶購接口,12點關閉網站搶購接口。 3.計劃任務主要分為以下兩種使用情況: 1.系統級別的定時任務: 臨時文件清理、系統信息采集、日志
    的頭像 發表于 11-24 15:49 ?125次閱讀

    如何判斷Linux系統的位數

    給你一個 Linux 系統,如何判斷它的位數? 我經常用的,有這么幾種方式。 第一個,使用命令: uname -m。 uname命令在 Linux 中用于顯示與操作系統內核相關的信息,加上 -m
    的頭像 發表于 11-24 10:28 ?119次閱讀

    定時器技術:Air780E如何革新定時任務管理?

    今天講的是關于Air780E如何革新定時任務管理的內容,希望大家有所收獲。
    的頭像 發表于 11-07 13:50 ?145次閱讀
    <b class='flag-5'>定時</b>器技術:Air780E如何革新<b class='flag-5'>定時任務</b>管理?

    mysql定時備份任務

    在生產環境上,為了避免數據的丟失,通常情況下都會定時的對數據庫進行備份。而Linux的crontab指令則可以幫助我們實現對數據庫定時進行備份。首先我們來簡單了解crontab指令,如果你會了請跳到下一個內容mysql備份。
    的頭像 發表于 10-31 10:07 ?130次閱讀

    Linux文件系統的掛載過程

    Linux文件系統(rootfs)是Linux系統中所有其他文件系統和目錄的起點,它是內核啟動時掛載的第一個文件系統。
    的頭像 發表于 10-05 16:50 ?268次閱讀

    linux定時任務的用法總結

    習慣了使用 windows 的計劃任務,使用 linux 中的 crontab 管理定時任務時很不適應。
    的頭像 發表于 08-14 18:16 ?802次閱讀
    <b class='flag-5'>linux</b><b class='flag-5'>定時任務</b>的用法總結

    ESP8266如何實現時間小于3us的定時任務

    想實現一個穩定的軟串口,現有的軟串口程序是通過中斷實現的,但中斷好像會被其他中斷打斷,導致數據丟失,定時器按文檔上的說法,只能大于50us,能不能實現時間小于3us的定時任務或者提高GPIO中斷的優先級呢?或者還有其他什么辦法?
    發表于 07-19 06:13

    在物通博聯工業智能網關的本地配置界面(WEB)直接配置定時控制任務

    開關,可實現全年定時任務自動執行。在多個任務日期重疊時,可選執行高等級的還是并行執行。設有一個遠程和本地的控制點,默認為本地狀態,網關自己執行設置的任務,當用戶將改控制點切換為遠程時可進行遠程一鍵開關或者指定
    的頭像 發表于 04-24 17:21 ?504次閱讀
    在物通博聯工業智能網關的本地配置界面(WEB)直接配置<b class='flag-5'>定時</b>控制<b class='flag-5'>任務</b>

    QNX與Linux基礎差異對比

    對于QNX系統和Linux系統的內核差異,我們拋開宏內核、微內核之類的爭議不談。單純從開發應用的角度而言,QNX和Linux系統的差異到底有多大,在開發的時候需要注意哪些細節問題?
    發表于 04-17 10:52 ?696次閱讀

    使用TC21x的GPT實現1m計時器執行定時任務,怎么配置GTM和GPT?

    專家們好,我想使用TC21x的GPT實現1m計時器執行定時任務,不知道怎么配置GTM和GPT?
    發表于 02-06 06:47

    鴻蒙原生應用/元服務開發-長時任務

    。 2.聲明后臺模式類型。 在module.json5配置文件中為需要使用長時任務的UIAbility聲明相應的長時任務類型。 { \"module\": { ... \"
    發表于 01-09 10:52

    Linux系統文件比較工具集合

    Linux系統中,文件比較是一種常見的任務,用于比較兩個文件之間的差異文件比較可以幫助我們找
    的頭像 發表于 01-02 13:53 ?658次閱讀

    鴻蒙原生應用/元服務開發-短時任務

    ; } 3.獲取短時任務剩余時間。查詢本次短時任務的剩余時間,用以判斷是否繼續運行其他業務,例如應用有兩個小任務,在執行完第一個小任務
    發表于 12-28 16:13

    分布式定時調度:xxl-job最佳實踐方法

    定時任務是按照指定時間周期運行任務。使用場景為在某個固定時間點執行,或者周期性的去執行某個任務,比如:每天晚上24點做數據匯總,
    的頭像 發表于 11-30 11:06 ?1495次閱讀
    分布式<b class='flag-5'>定時</b>調度:xxl-job最佳實踐方法

    HarmonyOS后臺任務管理開發指南上線!

    時的操作步驟。 ①了解相關機制及規格,實現更高效開發。 ○ 申請時機:應用需要在前臺或退至后臺 5 秒內申請短時任務。 ○ 數量限制:一個應用同一時刻最多支持申請 3 個。 ○ 配額機制:一個應用有一定時
    發表于 11-29 09:58