มีไลบรารีตัวกำหนดเวลางานสำหรับ node.js หรือไม่ [ปิด]


155

มี cron เช่นไลบรารี่บ้างไหมที่จะให้ฉันจัดตารางบางฟังก์ชั่นให้วิ่งในเวลาที่แน่นอน (เช่น 15:30 ไม่ใช่ x ชั่วโมงจากนี้เป็นต้น) หากไม่มีห้องสมุดประเภทนี้ควรนำไปใช้อย่างไร ฉันควรตั้งค่าให้โทรกลับทุกวินาทีและตรวจสอบเวลาและเริ่มงานที่กำหนดไว้สำหรับเวลาหรืออะไร


4
โหนด cron น่าจะเป็นตัวเลือกที่ดีมาก
JTR

var schedule = ต้องการ ('node-schedule'); เป็นสิ่งที่ดีที่สุด ไชโย !!!
Saumyajit

คำตอบ:


122

node-cronทำสิ่งที่ฉันอธิบาย


4
คุณเขียนประกาศ cronjob ใน app.js / scripts.js หรือไม่
ArVan

ไม่โหนด Cronช่วยให้คุณสามารถแก้ไขระบบงาน cron จาก Node.js? มันขึ้นอยู่กับกระบวนการของโหนดที่ทำงานอยู่หรือไม่? หรือจะให้คุณเรียกใช้โปรแกรมได้แม้ว่ากระบวนการหลักของคุณจะยุติลงหรือไม่?
Ajar

5
@ ไม่พบหลังจากการยกเลิกกระบวนการ nodejs งานทั้งหมดจะหายไป ไม่มีตาราง cron ส่งมาพร้อมกับ node-cron
โหวตขึ้น

1
ฉันเดาว่า @ChrisC ถ้าฉันไม่ได้ใช้กรอบใด ๆ ผมประกาศ crons app.jsใน ในsails.jsฉันทำมันในbootstrap
ArVan

2
@arVan หากคุณสนใจฉันจริง ๆ แล้วเริ่มทำงานagendaเพื่อเพิ่มการสนับสนุน Waterline ที่นี่: github.com/mikermcneil/agenda (แท้จริงแล้วเริ่ม - แม้ว่าควรจะมีความคืบหน้าการใช้งานบางอย่างในสัปดาห์หน้า)
mikermcneil

44

node-schedule ตัวกำหนดเวลางานที่เหมือน cron และไม่เหมือน cron สำหรับ Node


2
วิธีนี้จัดการเพื่อหลีกเลี่ยงไวยากรณ์ crontab ที่สับสนในบางครั้งและสามารถอ่านได้ในความคิดเห็น
Simon East

เช่นเดียวกับวาระการประชุมเพื่อให้มีการคงอยู่ 0.1.13
drdrej

5
node-schedule ไม่ได้จัดให้มีอยู่ ตามเอกสาร: Note that node-schedule is designed for in-process scheduling, i.e. scheduled jobs will only fire as long as your script is running, and the schedule will disappear when execution completes.
Mike Hedman

34

Agendaคือการกำหนดตารางเวลางานแบบ Lightweight สำหรับโหนด สิ่งนี้จะช่วยคุณ


1
วาระการประชุมจะขึ้นอยู่กับโหนด cron ที่มีชั้นคงอยู่ (Mongo) ดังนั้นคำตอบข้างต้นจะดีกว่า
drdrej

51
ชี้แจงในฐานะผู้เขียนของวาระการประชุมก็เป็นจริงไม่ได้ขึ้นอยู่กับโหนด cron เลย ...
ไรอัน

1
ไลบรารีของวาระการประชุมเป็นห้องสมุดที่ดีที่สุดเพียงแห่งเดียวเนื่องจากการตั้งค่านั้นง่ายและการใช้งานนั้นง่ายสำหรับผู้ใช้ Kudos
@Ryan

4
ฉันพบว่าagendaมีพฤติกรรมที่ไม่สอดคล้องกันและจะไม่แนะนำให้ใช้ ตรวจสอบปัญหาเปิดและ PRs เพื่อโทรออกด้วยตัวคุณเอง
Russbear

2
ระวังวาระไม่พร้อมผลิต มีปัญหาหน่วยความจำรั่วและตรวจสอบปัญหา ยังคงมีข้อบกพร่องมากมาย ดูเหมือนว่ามีแนวโน้มเมื่อพร้อม
เซบาสเตียน

15

later.jsเป็นไลบรารี "ตัวกำหนดตารางเวลา" ที่ดีของ JavaScript สามารถรันบน Node.js หรือในเว็บเบราว์เซอร์


3
ฉันลองคำแนะนำในกระทู้นี้เล็กน้อย แต่โมดูลนี้ฉันพบว่าเป็นมิตรกับผู้ใช้มากที่สุดและตรงไปตรงมา fwd ที่จะทำงานกับ .. ขอบคุณ!
Gene Bo

12

ฉันใช้กื: https://github.com/learnboost/kue มันค่อนข้างดี

คุณสมบัติอย่างเป็นทางการและความคิดเห็นของฉัน:

  1. งานล่าช้า
    • หากคุณต้องการให้งานรันในเวลาที่กำหนดให้คำนวณมิลลิวินาทีระหว่างเวลานั้นและตอนนี้ โทรหา job.delay (มิลลิวินาที) (หมอบอกว่านาทีซึ่งผิด) อย่าลืมเพิ่ม "jobs.promote ();" เมื่อคุณเริ่มงาน
  2. เหตุการณ์งานและความคืบหน้า pubsub
    • ฉันไม่เข้าใจ
  3. UI แบบรวมที่ครบครัน
    • มีประโยชน์มาก. คุณสามารถตรวจสอบสถานะงาน (เสร็จสิ้นทำงานล่าช้า) ใน UI รวมและไม่จำเป็นต้องเขียนโค้ดใด ๆ และคุณสามารถลบบันทึกเก่า ๆ ใน UI
  4. เลื่อนไม่มีที่สิ้นสุด
    • บางครั้งไม่ทำงาน ต้องรีเฟรช
  5. บ่งชี้ความคืบหน้าของ UI
    • เหมาะสำหรับงานที่ต้องใช้เวลามาก
  6. การบันทึกเฉพาะงาน
    • เนื่องจากเป็นงานที่ล่าช้าคุณควรบันทึกข้อมูลที่เป็นประโยชน์ในงานและตรวจสอบภายหลังผ่าน UI
  7. ขับเคลื่อนโดย Redis
    • มีประโยชน์มาก. เมื่อคุณรีสตาร์ทแอป node.js บันทึกงานทั้งหมดจะยังคงอยู่ที่นั่นและงานที่กำหนดเวลาไว้ก็จะทำงานเช่นกัน!
  8. ลองใหม่เป็นตัวเลือก
    • ดี
  9. ความสามารถในการค้นหาข้อความแบบเต็ม
    • ดี.
  10. RESTful JSON API
    • ฟังดูดี แต่ฉันไม่เคยใช้เลย

แก้ไข:

  1. kue ไม่ cron เหมือนห้องสมุด
  2. โดยค่าเริ่มต้น kue ไม่รองรับงานที่ทำงานซ้ำ ๆ (เช่นทุกวันอาทิตย์)

6
Kue เป็นคิวงานไม่ใช่ตัวกำหนดตารางเวลา
Leonid Beschastny

1
@LeonidBeschastny Kue เป็นคิวงาน และมันก็เป็นตัวกำหนดตารางเวลาด้วยเช่นกันเพราะมันสามารถ "ให้ฉันจัดตารางบางฟังก์ชั่นที่จะวิ่งในเวลาที่แน่นอน"
วินซ์หยวน

ฉันคิดว่างานของ Kue สามารถล่าช้าได้ แต่ไม่ได้กำหนดเวลาไว้แน่นอน
Leonid Beschastny

@LeonidBeschastny คุณพูดถูก Kue ไม่ได้ให้ API เพื่อกำหนดเวลางานให้กับเวลาที่แน่นอน แต่อย่างที่ฉันบอกไปว่า "ถ้าคุณต้องการให้งานทำงานในเวลาที่กำหนดให้คำนวณมิลลิวินาทีระหว่างเวลานั้นและตอนนี้โทรหา job.delay (มิลลิวินาที) (หมอบอกว่านาทีซึ่งผิด)" มันง่ายมาก .
วินซ์หยวน

1
คุณสามารถลอง kue-scheduler ซึ่งคล้ายกับ aganda
Fruch

9

node-crontabช่วยให้คุณแก้ไขงาน cron ของระบบจาก node.js การใช้ไลบรารี่นี้จะช่วยให้คุณสามารถรันโปรแกรมได้แม้ว่ากระบวนการหลักของคุณจะสิ้นสุดระยะเวลา ข้อจำกัดความรับผิดชอบ: ฉันเป็นผู้พัฒนา


จะยังคงมีอยู่หากเซิร์ฟเวอร์โหนดถูกรีเซ็ตหรือไม่
jonperl


ใช่งานยังคงอยู่
Blago

GPL ได้รับใบอนุญาตจึงไม่สามารถใช้งานได้ในโครงการเชิงพาณิชย์
drdrej

5
ใบอนุญาตคือ MIT
Blago

8

คุณสามารถใช้timexe

มันใช้งานง่ายน้ำหนักเบาไม่มีการพึ่งพามีการปรับปรุงไวยากรณ์มากกว่า cron ด้วยความละเอียดเป็นมิลลิวินาทีและทำงานในเบราว์เซอร์

ติดตั้ง:

npm install timexe

ใช้:

var timexe = require('timexe');
var res = timexe("* * * 15 30", function(){ console.log("It's now 3:30 pm"); });

(ฉันเป็นผู้เขียน)


ขอให้ฉันยกตัวอย่างหน่อยได้ไหม?
อเล็กซ์

1
โปรดดูตัวอย่างใน github: github.com/paragi/timexe
Simon Rigét

2

ผม auhor ของโหนด runnr มันมีวิธีการง่ายๆในการสร้างงาน นอกจากนี้ยังง่ายและชัดเจนในการประกาศเวลาและช่วงเวลา ตัวอย่างเช่นในการทำงานทุก ๆ 10 นาที 20 วินาที

Runnr.addIntervalJob('10:20', function(){...}, 'myjob')

หากต้องการทำงานเวลา 10.00 น. และ 15.00 น. ทุกวัน

Runnr.addDailyJob(['10:0:0', '15:0:0'], function(){...}, 'myjob')

มันง่ายที่ สำหรับรายละเอียดเพิ่มเติม: https://github.com/Saquib764/node-runnr




0

สิ่งนี้จะไม่เหมาะสำหรับทุกคน แต่หากแอปพลิเคชันของคุณได้รับการตั้งค่าให้ใช้คำสั่งผ่านซ็อกเก็ตแล้วคุณสามารถใช้ netcat เพื่อออกคำสั่งผ่าน cron ได้

echo 'mycommand' | nc -U /tmp/myapp.sock
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.