ThinkJS 定時(shí)任務(wù)

2021-09-17 14:27 更新

定時(shí)任務(wù)

項(xiàng)目在線上運(yùn)行時(shí),經(jīng)常要定時(shí)去執(zhí)行某個(gè)功能,這時(shí)候就需要使用定時(shí)任務(wù)來(lái)處理了。ThinkJS 支持命令行方式調(diào)用,結(jié)合系統(tǒng)的 crontab 功能可以很好的支持定時(shí)任務(wù)。

命令行執(zhí)行

ThinkJS 除了支持通過(guò) URL 訪問(wèn)來(lái)執(zhí)行外,還可以通過(guò)命令行的方式調(diào)用執(zhí)行。使用方式如下:

node www/production.js home/index/index

上面的命令表示執(zhí)行 home 模塊下 index Controller 里的 indexAction。

攜帶參數(shù)

如果需要加參數(shù),只要在后面加上對(duì)應(yīng)的參數(shù)即可:

node www/production.js home/index/index?name=thinkjs

Action 里就可以通過(guò) this.get 方法來(lái)獲取參數(shù) name 了。

修改請(qǐng)求方法

命令行執(zhí)行默認(rèn)的請(qǐng)求類(lèi)型是 GET,如果想改為其他的類(lèi)型,可以用下面的方法:

node www/production.js url=home/index/index&method=post

這樣就把請(qǐng)求類(lèi)型改為了 post。但這種方式下,參數(shù) url 的值里就不能包含 & 字符了(可以通過(guò)上面 / 的方式指定參數(shù))。

除了修改請(qǐng)求類(lèi)型,還可以修改下面的參數(shù):

  • host 修改請(qǐng)求的 host 默認(rèn)為 127.0.0.1
  • ip 修改請(qǐng)求的 ip 默認(rèn)為 127.0.0.1

修改 header

有時(shí)候如果想修改更多的 headers,可以傳一個(gè)完整的 json 數(shù)據(jù),如:

node www/production.js {"url":"/index/index","ip":"127.0.0.1","method":"POST","headers":{"xxx":"yyyy"}}

禁止 URL 訪問(wèn)

默認(rèn)情況下,命令行執(zhí)行的 Action 通過(guò) URL 也可以訪問(wèn)到。如果禁止 URL 訪問(wèn)到該 Action,可以通過(guò)think.cli 來(lái)判斷。如:

export default class extends think.controller.base {
  indexAction(){
    //禁止 URL 訪問(wèn)該 Action
    if(!think.cli){
      this.fail("only invoked in cli mode");
    }
    ...
  }
}

執(zhí)行腳本

可以創(chuàng)建一個(gè)簡(jiǎn)單的執(zhí)行腳本來(lái)調(diào)用命令行執(zhí)行,如:

cd project_path; 
node www/prodution.js home/index/index;

在項(xiàng)目目錄下創(chuàng)建目錄 crontab,將上面執(zhí)行腳本存為一個(gè)文件放在該目錄下。

定時(shí)執(zhí)行

借助系統(tǒng)里的 crontab 可以做到定時(shí)執(zhí)行,通過(guò)命令 crontab -e 來(lái)編輯定時(shí)任務(wù),如:

0 */1 * * * /bin/sh project_path/crontab/a.sh # 1 小時(shí)執(zhí)行一次

使用 node-crontab 模塊執(zhí)行定時(shí)任務(wù)

除了使用 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í)行。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)