[英]Node.js setTimeout for 24 hours - any caveats?
簡單的問題,我想在Node.js
設置24或12小時的超時,以定期(每天一次或兩次)檢查一些數據庫數據並清除可疑垃圾(如果有的話)。
是否有任何可能的問題或性能問題,由設置巨大的超時引起,我需要注意? 我不介意它是不是確切的12-24小時毫秒,並不介意在服務器崩潰時失去這個超時,因為我將在服務器啟動時運行相同的垃圾收集器。
結論:
我已經成功使用了包cron
。 它使用簡單,通常與CronTab兼容。 我有一份工作,每個月運行一次,自去年以來一直有效,所以我可以證明這一點。
話雖這么說,這個包最終只是在內部使用setTimeout
所以你沒有真正的問題。 如果您的超時數量太大(大於最大JavaScript整數),則可能存在問題,但1000 * 60 * 60 * 24
明顯小於此值。
顯然,如果您的系統出現故障或腳本由於其他原因而崩潰,則超時將無效。
如果可用(或Windows任務調度),您也可以直接使用crontab
。
就個人而言,我會使用cron
作業來執行此類操作(在Unix / Linux中)或Windows中的“計划任務”。 在任何情況下,工作都將完全在服務器上,由服務器完成......因此,沒有理由讓JavaScript應用程序(在“其他”計算機上)參與其中。
更一般地說: “不,不要告訴別人'去睡12個小時,'不知怎的,相信這意味着他/她會及時醒來。” 而是使用鬧鍾。 計算活動應該[下一次]發生的絕對時間,然后確保活動確實 “不會更早”發生。 安排實際需要完成工作的計算機,使用該計算機上可用的任何調度工具在適當的時間完成工作。
應該沒有任何問題,但在我看來,用OS cron工作做這件事情會更好。 這將使用OS計時器,將調用您的節點應用程序; 這對所有人來說都是清楚的,即使對於那些從未見過節點或JavaScript的人來說也是如此。 此外,它會自動保護您免受長期內存泄漏,因為您的應用程序將在每次迭代后被終止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.