2016-05-11 15 views
6

Ich habe ein seltsames Problem, wo lange setTimeouts nicht auf Raspberry PI auslösen, aber sie tun auf Ubuntu/X64 und OSX.Lange setTimeout in NodeJS auf Raspberry PI

'use strict'; 

const delay = 1000 * 3600 * 8; 
const date = new Date(); 

date.setTime(new Date().getTime() + delay); 
console.log('Alarm set to', date.toString()); 

setTimeout(function() { 
    console.log('Alarm!', new Date()); 
}, delay); 

Dieser Code wird Alarm! nach 8 Stunden auf Ubuntu/x64 Echo, aber es löst nie auf RPI.

Works:

  • Ubuntu/x64
  • OSX

funktioniert nicht:

  • RPI b + mit Raspian 7 (Node 6.1)
  • RPI 3 mit Raspian 8 (Knoten 4.4.4, 6.0 und 6.1)

Nach ps das Skript ist in Sl Zustand: Interruptible sleep (waiting for an event to complete), is multi-threaded (using CLONE_THREAD, like NPTL pthreads do).

In einer komplexeren Version dieses Codes, wo ich das Skript über eine Web-Benutzeroberfläche steuern kann, der „Alarm“ wird nach dem Satz gehen Zeit, aber nur wenn ich auf die Web-UI zugreife (um die Anwendung zu aktivieren?).

Ist das ein NodeJS Bug oder mache ich etwas funky?

+1

diese gefunden, scheint ein bekanntes Problem zu sein: https://github.com/nodejs/node/issues/4262 – Znarkus

+0

ich das gleiche erlebt. Dieses Problem ist noch offen – jamesfmackenzie

Antwort

0

Hinzufügen dieser löst es, bis das NodeJS Problem behoben ist.

// Every 20 min to keep awake 
setInterval(() => 1, 1000 * 60 * 20);