2017-05-23 35 views
3

node-cronパッケージで動作するNodeJSベースのクローラを作成しています。アプリケーションが永久にcronとして実行され、ログを含む一定期間にクローラを実行するため、エントリスクリプトが終了しないようにする必要があります。NodeJSプログラムが終了しないようにする

ウェブアプリケーションでは、サーバーはリスンして終了を防止しますが、サーバーレスのアプリケーションでは、すべてのコードが実行された後でプログラムを終了し、cronを待つことはありません。

これにはループwhile(true)を書きますか? この目的のためのノードのベストプラクティスは何ですか?

ありがとうございます!

答えて

4

nodejsがシングルスレッドなので、while(true)は機能しません。それはCPU全体をつかむだけで、他に実行できるものはありません。

nodejsは、将来実行される可能性のあるものがあれば実行されます。これには、開かれたTCPソケット、リッスンサーバー、タイマーなどが含まれます。

もっと具体的に答えるには、コードを見て、node-cronの使い方を確認する必要があります。

setInterval(function() { 
    console.log("timer that keeps nodejs processing running"); 
}, 1000 * 60 * 60); 

をしかし、あなたのnodejsそして、あなたが適切ノードのcronを使用していて、正しく、将来的に実行するようにスケジュールされたタスクを持っている場合は、その表示されるように、ノードのcron自体は、タイマーを使用しています。このような簡単なsetInterval()を追加しますプロセスは停止すべきではありません。だから、あなたの本当の問題は、node-cronを使って将来のためにタスクを正しくスケジューリングしていないということです。 node-cronを使用している実際のコードを表示した場合にのみ、この問題を解決するために役立つ可能性があります。

+0

私のモジュールは間違ったパスを使っていたので、私のcronは実行されていませんでしたが、静かに終了していましたが、パスには 'glob ' –

関連する問題