我有一个可以正常运行的nodejs程序。它做它的事情,然后睡一段时间,然后醒来,并再次这样做。这是非常可靠的。
它还做了一些日志记录,所以我可以观察进度和状态:
[2013-Dec-03 08:01:13] setWakeup
[2013-Dec-03 08:01:13] job4 55 runs per hour
[2013-Dec-03 08:01:13] job4 sleep 59962ms, wake at 08:02:13
[2013-Dec-03 08:02:13] job4 awake
....当它记录“睡眠”时,它实际上是用指定的毫秒数调用setTimeout()。请注意,根据时间戳,“唤醒”消息出现在“睡眠”消息之后大约60秒。
问题是。
有时,此setTimeout不会在预期时间唤醒。我说的不是几毫秒的错失率,甚至不是百分之几。我是说,有时候我想让它休眠60秒,它会休眠45分钟。看看这个。
[2013-Dec-03 07:16:11] setWakeup
[2013-Dec-03 07:16:11] job4 54 runs per hour
[2013-Dec-03 07:16:11] job4 sleep 61297ms, wake at 07:17:12
[2013-Dec-03 08:01:08] job4 awake
....请注意,“唤醒”消息在休眠消息后大约45分钟有一个时间戳。这是在MacBook专业版上,节点v0.10.22。
有没有可能计算机已经进入睡眠状态?如何让它在setTimeout()数量的几个百分比内可靠地唤醒?
发布于 2013-12-04 02:20:20
听起来你的Mac确实睡着了。
您可以使用pmset (一个命令行界面工具)来设置唤醒时间。查看手册页面(man pmset),这可能会在节点上起作用:
var child_process = require('child_process');
// to set a specific wake up time:
child_process.spawn('pmset', [ 'schedule', 'wake', 'time', 'HH:MM:SS' ]);(其中HH:MM:SS是指您希望唤醒它的时钟时间)。
然而,我不确定你是否能让它足够可靠地唤醒,以达到“在几个百分点内”。
我对setTimeout的内部工作原理也不够熟悉,不知道你的苹果电脑睡着了会不会干扰它(因为它基本上会停止节点进程)。
https://stackoverflow.com/questions/20358148
复制相似问题