草庐IT

node.js - 在不关闭数据库连接的情况下将 Node.js 脚本作为 CRON 作业运行最终会杀死所有 RAM 吗?

coder 2023-11-04 原文

我正在构建将作为 CRON 作业运行的 Node.js 脚本。 (完整的终端脚本)。这些脚本使用 API 和 MongoDB( native 驱动程序)从周围获取数据。我没有使用 db.close() 语句,因为该脚本永远不会自行结束(或者至少从终端看起来是这样),要完成它,它必须按 CTRL+C 取消。

当时我在写这些脚本的时候,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);

  });

最佳答案

Node 脚本仅在不再监听事件时自行退出。

使用您的脚本,您可能知道在实现脚本的主要目的后什么时候不需要做任何事情。例如,当脚本的目的是执行特定代码、打印摘要等时,您可以在该命令后添加 process.exit(0); 以确保脚本在以下时间完成它应该。

在这种情况下,当您没有一行摘要后可以退出时,您可以监听某个事件并在它到达时退出。例如:

usersCollection.on('end', process.exit);

除了在正确位置的 process.exit 之外,您还可以设置超时以在特定时间后终止脚本。例如:

setTimeout(process.exit, 20*1000);

将在 20 秒后终止脚本。可以添加它以防万一数据库或连接出现问题并且您永远不会收到“结束”事件,或者等待它的时间太长。

有时为这样的脚本添加 process.exit(0); 可能比关闭当时可能打开的所有数据库连接或其他可能阻止脚本终止的事情更方便.

关于node.js - 在不关闭数据库连接的情况下将 Node.js 脚本作为 CRON 作业运行最终会杀死所有 RAM 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39465651/

有关node.js - 在不关闭数据库连接的情况下将 Node.js 脚本作为 CRON 作业运行最终会杀死所有 RAM 吗?的更多相关文章

  1. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  2. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  3. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  4. ruby-on-rails - 如何在 ruby​​ 中使用两个参数异步运行 exe? - 2

    exe应该在我打开页面时运行。异步进程需要运行。有什么方法可以在ruby​​中使用两个参数异步运行exe吗?我已经尝试过ruby​​命令-system()、exec()但它正在等待过程完成。我需要用参数启动exe,无需等待进程完成是否有任何ruby​​gems会支持我的问题? 最佳答案 您可以使用Process.spawn和Process.wait2:pid=Process.spawn'your.exe','--option'#Later...pid,status=Process.wait2pid您的程序将作为解释器的子进程执行。除

  5. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  6. ruby - 默认情况下使选项为 false - 2

    这是在Ruby中设置默认值的常用方法:classQuietByDefaultdefinitialize(opts={})@verbose=opts[:verbose]endend这是一个容易落入的陷阱:classVerboseNoMatterWhatdefinitialize(opts={})@verbose=opts[:verbose]||trueendend正确的做法是:classVerboseByDefaultdefinitialize(opts={})@verbose=opts.include?(:verbose)?opts[:verbose]:trueendend编写Verb

  7. ruby - 续集在添加关联时访问many_to_many连接表 - 2

    我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以

  8. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  9. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  10. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

随机推荐