好久不寫blog了,看到yufeng老大那麼活躍,我也“耐不住寂寞”啊。
前不久寫一個小東西,其中涉及很多定時執行的任務,如數據清理,數據導入,定時計算等等。
涉及到這個東西,就想起了linux下的cron,多麼貼身的服務啊。
但是在我的erlang代碼裏,卻缺少這樣一個東西。沒有關係,自己動手!
首先是crontab.cfg配置文件,其語法與linux下的crontab一致,可以 man crontab 進行參考。
但是許要注意,我們使用Erlang Term的語法定義每條任務:
{{m, h, dom, mon, dow}, {M, F, A}}.
m, h, dom ,mon, dow,爲integer,如果包含*,或者step信息,則許要使用 "" 雙引號包圍,使其爲string。MFA,毫無疑問就是我們要定期執行的函數,其會在一個spawn的process中執行.
主要包含2個module,一個用來解析crontab.cfg,一個定期檢測crontab.cfg,判斷是否符合條件,如果符合則執行MFA函數。這個module還比較粗糙,採用list遍歷,效率也不是很高。但是已經可以使用了 :)
你可以修改crontab.cfg,增添定時任務,cron server通過檢測文件的last modified time來判斷是否許要重新加載.
壓縮包中,有一個run.sh,你可以運行:
./run.sh
啓動cron server, 等待約1分鐘,會執行crontab.cfg中的MFA,產生屏幕輸出:
run the routine by cron server:1
hello