Hỏi về Cron job



  • Như tiêu đề mình muốn hỏi về cách sử dụng cron job.
    Ví dụ mình muốn chạy cái console.log("Làm công việc") 5 lần vào 5 khoảng thời gian khác nhau (random) trong tầm từ 9h > 17h thì mình nên code thế nào?
    Và làm sao để mình lấy được thời gian lúc nó làm công việc?
    Bạn nào làm qua rồi code mẫu cho mình xem với! Thanks

    0_1538411018721_image.png



  • @Thành187
    Mình nghĩ bạn hiểu sai rồi.

    1. Cronjob nó sẽ thực hiện 1 tác vụ theo một pattern thời gian mà bạn quy định => có quy luật.
    2. Nếu cách của bạn là 1 tác vụ tức thì. Ít quy tắc và ko pattern thì cái đó là mấy cái delay job. Nghĩa là bạn random ra 1 khoảng tg sẽ làm. Sau đó truyền xuống để các worker nhận thông tin xử lí sau khi đung đoạn thời gian đó. Để dùng delay job thì bạn phải dùng structure Message Queue. (Rabbit MQ, Redis Queue)

    Cách 1 là cronjob. Libary : cronjob
    Cách 2 là Delay job. Libary: Kue (redis), hoặc bee (mongo thì phải) =.=

    2 Key work đó. Bạn tìm hiểu thêm là xong à

    Sent from Rodgers Zone!!!

    0


  • Theo như yêu cầu của bạn thì có thể viết như sau

    var lanLamCongViec = 0
    var lanLamCongViecMax = 5
    var demTimeout = 0
    var thoiGianBatDau = 9 * 3600 // 9h
    var thoiGianKetThuc = 17 * 3600 // 17h
    setInterval(() => { // Timer 1s
      var date = new Date()
      var gio = date.getHours()
      var phut = date.getMinutes()
      var giay = date.getSeconds()
      var thoiGian = giay + phut * 60 + gio * 3600
    
      if (thoiGian === thoiGianBatDau) { // Reset đếm số lần làm công việc => Bắt đầu chu kỳ mới
        lanLamCongViec = 0
        demTimeout = funRandomThoiGian() // Tính thời gian timeOut cho lượt làm việc đầu tiên
      }
    
      if (demTimeout === 0 && lanLamCongViec < 5 && thoiGian >= thoiGianBatDau && thoiGian <= thoiGianKetThuc) {
        console.log(`${gio}: ${phut}: ${giay} => Thực hiện công việc`)
        funLamCongViec()
        demTimeout = funRandomThoiGian() // Tính thời gian timeOut cho lượt làm việc tiếp theo
      }
      demTimeout--
    }, 1000 * 1)
    
    function funRandomThoiGian () { // Random thời gian gọi hàm funLamCongViec() tính từ thời điểm chạy hàm funRandomThoiGian () đến thời điểm thoiGianKetThuc
      var date = new Date()
      var thoiGian = date.getSeconds() + date.getMinutes() * 60 + date.getHours() * 3600
      return Math.random() * (thoiGianKetThuc + lanLamCongViec - thoiGian - lanLamCongViecMax) + thoiGian
    }
    
    function funLamCongViec () {
      lanLamCongViec++
      console.log('Làm công việc')
    }
    
    

    0_1541496664291_test.js



  • @Datdp ok em cảm ơn bác


Log in to reply