0

したがって、基本的にDebian + KodiであるRaspberry PiデバイスでOSMCを実行しています。真夜中にビデオを再生するように Kodi に (JSON-RPC API を介して) 指示する Node.js アプリを実行しています。スケジューリングは非常に基本的なものです。次の真夜中の時刻を計算し、現在の時刻を差し引いて、 に渡す遅延がありますsetTimeout

簡単でしょ?それが機能しないことを除いて。翌朝私がオフィスに入ったとき、ビデオは再生されておらず、ログによると、へのコールバックsetTimeoutも呼び出されませんでした。

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

次に、時間間隔を増やして (1 秒、1 分、5 分、1 時間、8 時間、24 時間) いくつかのログをスケジュールする最も単純な Node.js プログラムを作成しました。また、現在の時刻を 1 時間ごとに出力します。

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 時間のコールバックの両方が開始されませんでした。また、1 時間ごとのログのほとんどが欠落しています。

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

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

4

1 に答える 1

0

どうやらそれは既知の問題です: https://github.com/nodejs/node/issues/4262

于 2016-04-27T11:20:15.753 に答える