簡體   English   中英

Nest.js 動態 cron 作業會在重啟或關機后被刪除嗎?

[英]Will Nest.js dynamic cron jobs be deleted after a restart or shutdown?

所以我用Nest.js開發了一個系統,它能夠根據用戶在前端應用程序中的輸入創建一個動態 cronjob ,我將這些數據存儲在我的數據庫中,同時我使用動態調度模塊在服務器中創建作業API 今天我想知道如果我的服務器關閉或它自己重新啟動,我的 cronjobs 會發生什么,因為我的作業不是聲明性的並且它們是在運行時創建的,我認為也許當我的服務器啟動時我應該再次創建 cronjobs? 我不確定這是否存儲在 memory 或其他東西中,因為它不在文檔中。

簡而言之,我的擔憂是:

服務器啟動后,我是否應該使用數據庫中的信息重新創建作業? 為什么是或為什么不是?

服務器重新啟動后,您必須重新啟動 CRON 任務。

您已經提到您已經將任務存儲在數據庫中,因此您應該能夠獲得在服務器 init 上重新創建任務所需的信息。

我假設您有一個Service來處理 CRON 任務並可以訪問數據庫。

您可以對其進行修改以實現OnModuleInit接口並具有執行邏輯來讀取所有應該運行並啟動它們的現有任務:

@Injectable()
class CronService implements OnModuleInit {
  constructor(private readonly cronRepository: CronRepository) {}
  
  /*
    ...
    CRON IMPLEMENTATION
    ...
  */

  async onModuleInit: Promise<void> {
    await this.restartSavedCronTasks();
  }
}

答案是肯定的,您應該在服務器重新啟動后重新創建 cron 作業。 最好在用戶創建 cron 作業后,將其存儲在數據庫中或使用您已經用於前端的數據庫。

一般來說,如果有必要,您可以對這些數據進行兩個級別的持久性。

方案 1

您很少重新啟動服務器。 在這種情況下,將存儲到 s3 存儲桶(非公共)中的 json 文件或 sql 或 mongo 數據庫(如果已連接)中的持久性文件。

在服務器預熱時重新創建“未處理”或相關的 cron 作業。

方案 2

您經常重新啟動服務器/服務。 在這種情況下,可能存儲到內存數據庫,如 Redis 以及更持久的類型(以防您的 Redis 數據庫下降並且您需要重新填充它 - 前提是此數據很重要)。

在服務器預熱時重新創建“未處理”或相關的 cron 作業。

通常存儲到 Redis 而不是在特定服務器實例上存儲在內存中也可以讓您的通用架構更具可擴展性,因為不同的服務器也可以從 Redis 讀取(相同的“事實來源”)

我希望這可以幫助您相應地規划您的架構:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM