2016-04-26 15 views
0

私は私のRaspberry Piデバイス(本質的にDebian + Kodi)でOSMCを実行しています。私は真夜中にいくつかのビデオを再生するKodi(JSON-RPC API経由)を伝えるNode.jsアプリを実行している。スケジューリングは非常に基本的です。次の真夜中の時刻を把握し、現在の時刻を引いて、setTimeoutに渡す遅延があります。Raspberry Pi/DebianのNode.js:setTimeoutの動作が異常/信頼できない

簡単右ですか?それ以外は機能しません。私が翌朝就任したとき、ビデオは再生されておらず、ログによると、setTimeoutへのコールバックは呼ばれませんでした。

Piのシステムクロックを23:58 PMに設定しました。プログラムを開始して2分待ってから、ビデオが問題なく再生されました。また、間隔が1日ではなく、たとえば10分であれば正常に動作します。

次に、最も単純なNode.jsプログラムを書いて、時間間隔(1s、1m、5m、1h、8h、24h)を増やしていくつかのログをスケジュールしました。

function log(format) { 
    var args = Array.prototype.slice.call(arguments, 1); 
    console.log.apply(null, ['%s: ' + format, new Date()].concat(args)); 
} 

function schedule(delay) { 
    setTimeout(function() { 
     log('callback called after %d ms', delay); 
    }, delay); 

    log('scheduled setTimeout(%d)', delay); 
} 

schedule(1000); 
schedule(60 * 1000); 
schedule(5 * 60 * 1000); 
schedule(60 * 60 * 1000); 
schedule(8 * 60 * 60 * 1000); 
schedule(24 * 60 * 60 * 1000); 

function logTime() { 
    log('current time is %s', new Date()); 
} 

logTime(); 
setInterval(logTime, 60 * 60 * 1000); 

は、これは私がscreenでそれを実行したときに、その出力が何であったかです::

Mon Apr 25 2016 14:11:54 GMT+0200 (CEST): scheduled setTimeout(1000) 
Mon Apr 25 2016 14:11:54 GMT+0200 (CEST): scheduled setTimeout(60000) 
Mon Apr 25 2016 14:11:54 GMT+0200 (CEST): scheduled setTimeout(300000) 
Mon Apr 25 2016 14:11:54 GMT+0200 (CEST): scheduled setTimeout(3600000) 
Mon Apr 25 2016 14:11:54 GMT+0200 (CEST): scheduled setTimeout(28800000) 
Mon Apr 25 2016 14:11:54 GMT+0200 (CEST): scheduled setTimeout(86400000) 
Mon Apr 25 2016 14:11:54 GMT+0200 (CEST): current time is Mon Apr 25 2016 14:11:54 GMT+0200 (CEST) 
Mon Apr 25 2016 14:11:55 GMT+0200 (CEST): callback called after 1000 ms 
Mon Apr 25 2016 14:12:55 GMT+0200 (CEST): callback called after 60000 ms 
Mon Apr 25 2016 14:16:55 GMT+0200 (CEST): callback called after 300000 ms 
Mon Apr 25 2016 15:21:31 GMT+0200 (CEST): callback called after 3600000 ms 
Mon Apr 25 2016 15:21:31 GMT+0200 (CEST): current time is Mon Apr 25 2016 15:21:31 GMT+0200 (CEST) 
Mon Apr 25 2016 16:21:31 GMT+0200 (CEST): current time is Mon Apr 25 2016 16:21:31 GMT+0200 (CEST) 
Tue Apr 26 2016 08:01:23 GMT+0200 (CEST): current time is Tue Apr 26 2016 08:01:23 GMT+0200 (CEST) 
Tue Apr 26 2016 08:01:23 GMT+0200 (CEST): callback called after 28800000 ms 

だから、短い間隔が期待通りに働いたが、1時間のコールバックの両方それはまた、すべての時間、現在時刻を表示します8時間のコールバックは、私が実際に出力を確認するまで、キックオフしていませんでした。また、毎時ログのほとんどが失われています。

誰かがここで何が起こっているのか説明できますか?

私はNode.js v5.10.1を実行していますが、v4.4.3は同じ動作を示しています。

+0

は、スリープモードまたは休止状態の任意の並べ替えはありますか? –

+0

@BenFortune:あなたが知っている、それは実際に理にかなっています。 RPiは電源管理をサポートしていないが、RPi 3以降に変更されている可能性があることを読んだ。 –

+0

RPi 3にはまだ電源管理はありませんが、OSMCには何らかのアイドリングの可能性があります。 'journalctl -b'を見てアイドル状態の管理があるかどうか調べてみてください。 –

答えて

関連する問題