【问题标题】:Mongodb gets locked when working with crontab使用 crontab 时 Mongodb 被锁定
【发布时间】:2019-02-27 06:14:06
【问题描述】:

我正在创建一个应用程序,它从 API 中提取数据并使用 crontab 将其保存到 MongoDB。

这是我的crontab 文件的示例:

*/2 * * * * /home/`whoami`/TLC/dataProvider1.js
*/1 * * * * /home/`whoami`/TLC/dataProvider2.js
*/3 * * * * /home/`whoami`/TLC/dataProvider3.js

脚本是我制作的可执行文件,它们都有一个require 语句,用于一个具有数据库连接的单独文件,因此它们每个都连接到数据库,以便它可以保存提取的数据。 数据库连接文件:

var mongoose = require('mongoose');

var connect = function () {
    mongoose.connect('mongodb://localhost:27017/vario', {
        socketTimeoutMS: 0,
        keepAlive: true,
        reconnectTries: 30,
        useNewUrlParser: true,
        autoReconnect: true,
        keepAliveInitialDelay: 300000
    });
};
connect();

mongoose.connection.on('connected', function () {
    console.log('Connection established to the Database...');
});

mongoose.connection.on('error', function (err) {
    console.log('Could not connect to Database.\nError: ' + err);
});

process.on('SIGINT', function () {
    mongoose.connection.close(function () {
        console.log('Force to close the MongoDB conection');
        process.exit(0);
    });
});

module.exports = connect;

问题:当这些作业运行大约一个小时时,MongoDB 不知何故被锁定,无法保存更多数据。触发 mongo shell 会产生连接已被拒绝的错误。使用mongod 进行恢复也会产生一个错误,即数据文件(/data/db/)上的另一个实例已经在运行,因此它无法锁定mongod.lock 文件。我现在处理这个问题的唯一方法是关闭守护程序并重新启动它。我该如何处理?

注意:我使用了crontab,因为setInterval 会干扰浏览应用程序,以防它保存到数据库中。

【问题讨论】:

    标签: node.js mongodb mongoose cron


    【解决方案1】:

    经过仔细检查,我意识到我的 crontab 作业正在创建与从未关闭的数据库的新连接。我所要做的就是确保在脚本完成运行时关闭连接。

    【讨论】:

      猜你喜欢
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 1970-01-01
      • 2012-12-16
      • 1970-01-01
      • 2012-11-01
      • 1970-01-01
      相关资源
      最近更新 更多