Mongodb блокируется при работе с crontab - PullRequest
0 голосов
/ 23 сентября 2018

Я создаю приложение, которое извлекает данные из API и сохраняет их в MongoDB, используя crontab.

Это пример того, как выглядит мой crontab файл:

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

Сценарии - это файлы 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 приводит к ошибке, что в соединении отказано.Использование mongod для восстановления также выдает ошибку, что другой экземпляр в файле данных (/ data / db /) уже запущен, поэтому он не может заблокировать файл mongod.lock.Единственный способ справиться с этим прямо сейчас - это отключить демона и перезапустить его.Как я могу справиться с этим?

Примечание: Я использовал crontab, поскольку setInterval мешал просматривать приложение в случае его сохранения в БД.

1 Ответ

0 голосов
/ 02 октября 2018

После тщательного осмотра я понял, что мои задания crontab создавали новые соединения с БД, которые никогда не были закрыты.Все, что мне нужно было сделать, это убедиться, что соединение закрывается после завершения работы скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...