我有一个运行的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
....
当它记录“sleep”时,实际上是调用带有指示的ms数量的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 Pro上,节点v0.10.22 电脑是否可能进入睡眠状态?如何在setTimeout()数量的百分之几内可靠地唤醒它?
答案 0 :(得分:0)
听起来你的Mac确实睡了。
您可以使用pmset
(CLI工具)设置唤醒时间。查看手册页(man pmset
),这可能来自Node:
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
的内部工作原理还不熟悉,知道你的Mac是否会干扰它(因为它基本上会停止Node过程)。