W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
項(xiàng)目在線上運(yùn)行時(shí),經(jīng)常要定時(shí)去執(zhí)行某個(gè)功能,這時(shí)候就需要使用定時(shí)任務(wù)來處理了。ThinkJS 支持命令行方式調(diào)用,結(jié)合系統(tǒng)的 crontab 功能可以很好的支持定時(shí)任務(wù)。
ThinkJS 除了支持通過 URL 訪問來執(zhí)行外,還可以通過命令行的方式調(diào)用執(zhí)行。使用方式如下:
node www/production.js home/index/index
上面的命令表示執(zhí)行 home
模塊下 index
Controller 里的 indexAction。
如果需要加參數(shù),只要在后面加上對(duì)應(yīng)的參數(shù)即可:
node www/production.js home/index/index?name=thinkjs
Action 里就可以通過 this.get
方法來獲取參數(shù) name
了。
命令行執(zhí)行默認(rèn)的請(qǐng)求類型是 GET,如果想改為其他的類型,可以用下面的方法:
node www/production.js url=home/index/index&method=post
這樣就把請(qǐng)求類型改為了 post。但這種方式下,參數(shù) url 的值里就不能包含 & 字符了(可以通過上面 / 的方式指定參數(shù))。
除了修改請(qǐng)求類型,還可以修改下面的參數(shù):
host
修改請(qǐng)求的 host 默認(rèn)為 127.0.0.1ip
修改請(qǐng)求的 ip 默認(rèn)為 127.0.0.1有時(shí)候如果想修改更多的 headers,可以傳一個(gè)完整的 json 數(shù)據(jù),如:
node www/production.js {"url":"/index/index","ip":"127.0.0.1","method":"POST","headers":{"xxx":"yyyy"}}
默認(rèn)情況下,命令行執(zhí)行的 Action 通過 URL 也可以訪問到。如果禁止 URL 訪問到該 Action,可以通過think.cli
來判斷。如:
export default class extends think.controller.base {
indexAction(){
//禁止 URL 訪問該 Action
if(!think.cli){
this.fail("only invoked in cli mode");
}
...
}
}
可以創(chuàng)建一個(gè)簡(jiǎn)單的執(zhí)行腳本來調(diào)用命令行執(zhí)行,如:
cd project_path;
node www/prodution.js home/index/index;
在項(xiàng)目目錄下創(chuàng)建目錄 crontab
,將上面執(zhí)行腳本存為一個(gè)文件放在該目錄下。
借助系統(tǒng)里的 crontab 可以做到定時(shí)執(zhí)行,通過命令 crontab -e
來編輯定時(shí)任務(wù),如:
0 */1 * * * /bin/sh project_path/crontab/a.sh # 1 小時(shí)執(zhí)行一次
除了使用 crontab 和命令行聯(lián)合執(zhí)行定時(shí)任務(wù)外,也可以使用 node-crontab
模塊執(zhí)行定時(shí)任務(wù)。如:
import crontab from "node-crontab";
// 1 小時(shí)執(zhí)行一次
let jobId = crontab.scheduleJob("0 */1 * * *", () => {
});
將上面代碼文件存放在 src/common/bootstrap
目錄下,這樣可以在服務(wù)啟動(dòng)時(shí)自動(dòng)執(zhí)行。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: