私はCRONジョブとして実行されるNode.jsスクリプトを構築しています。 (フルターミナルスクリプト)。これらのスクリプトは、APIを使用して全面的にデータをフェッチし、MongoDB(ネイティブドライバ)が使用されます。私はdb.close()
ステートメントを使用していないし、そのスクリプトはそれ自体で(または少なくともそれは端末からそのように見える)決して終了しないため、それを終了するには、Ctrl + Cキーを押してキャンセルする必要があります。データベース接続を終了せずにNode.jsスクリプトをCRONジョブとして実行すると、最終的にすべてのRAMが消去されますか?
私がこれらのスクリプトを書いていたとき、Stack overflowの誰かが、とにかく接続を閉じる必要はないと私に言った。だから私はそれを許した。
今、これらのスクリプトは実際に実行されているのでしょうか?これらはCRONジョブとして実行されるため、間隔が狭いため、最終的にサーバーからRAMを削除することになります。つまり、何千ものスクリプトが実行され、db.close()
の文が待っていますか?
コード例:何も、それ以上のイベントをリッスンしていないだけで、それ自体で
MongoClient.connect(mongoUrl, (err, db) => {
if (err) {
console.log(err);
return;
}
var usersCollection = db.collection('users').find();
usersCollection.on('data', (doc) => {
console.log(doc);
});
本当にいいですか?私がこれを正しく理解していれば、 'process.exit(0)'を使うと; 'console.log(doc)'の後に、最初のdocしか取得せず、次にスクリプトをkillするでしょうか? – Kunok
@Kunokあなたは正しいです。私はあなたのスクリプトを注意深く読まなかった。スクリプトを実行する必要があるときに 'process.exit(0);'を追加する必要があります。 – rsp
私はNodeを1週間だけ使用していますが、まだそれほど快適ではありません。スクリプトを強制終了するようにタイムアウトを設定するのは良い考えですか?たとえば、スクリプトが10分ごとに実行された場合、新しいCRONジョブ実行の前にそれを死に至らせますか? – Kunok