监控在Ubuntu实例上运行的node.js脚本

我有一个node.js脚本,一天在Ubuntu EC2实例上运行一次。 这个脚本从一些search的数千个远程API中提取数据并保存到我们的本地数据库。 有什么办法可以监视这个远程服务器上的node.js脚本吗? 由于某种原因,脚本崩溃的情况很less,如果没有SSH实例并检查日志,我们无法弄清楚。 然而,我在创build了一个小系统后,由于一些未捕获的exception,当脚本完成执行脚本崩溃时,我们发送电子邮件给我们一个电子邮件。

但是,我们需要开发一个更好的系统,通过我们的pipe理应用程序的web界面监视脚本的进度,这个应用程序部署在其他实例上,并且通过这个界面触发脚本的启动/停止。 有什么可能实现这个目标?

如果你喜欢留在Node.js中,那么有几个过程监视工具:

除了监测过程, PM2还具有许多其他function。 您可以通过CLI或其官方网页界面监控您的stream程: https : //keymetrics.io/ 。 在npm上快速search也给了一大堆漂亮的非官方的gui工具: https ://www.npmjs.com/search?q=pm2+web

永远是不是function丰富的PM2,但将做基本的stream程操作和gui的夫妇也可在npm 。

这里有两个问题需要解决:

  1. 调度工作要完成
  2. 监视进程失败

在一个简单的层面上,这很容易:安排一个cron作业并重新启动失败的东西,让他们继续尝试。

然而,当事情不顺利的时候,它有更多的细节,比如你正在调度什么,以及如何执行。 这也会让你看到每一件小小的工作。

增加一点复杂性,你可以得到这样的结果:

  1. 安排启动一切的脚本(通过cron,如果这很舒服)
  2. 该脚本生成需要执行到队列中的多个作业
  3. 一个工作进程(或者n个工作进程)使用该队列并执行待处理的作业
  4. 您可以监控作业的进度,以及每个工人的状态(崩溃,失败,作业完成等)。 上面提到的其他工具是非常好的select(永远,pm2等)

当工作失败时,其他工作人员可以拿起正在进行的一小部分工作并重新启动。 这比重新启动整个过程高效得多,并且还可以让您根据如何分割工作负载,在n个工作人员之间进行并行化。

你可以很容易地把状态扔到一个networking应用程序,所以你可以定期检查,而不是必须挖掘服务器日志。

您还可以通过不同types的故障获得更多的智能。 networking错误? 重试5次。 额定限制? 逐步退出。 崩溃? 不要重试并通过电子邮件通知。 等等

我已经用pm2试过了,你可以得到任务的信息,然后找出或抓取日志文件。 或者你可以有一个日志logging服务器,另请参阅: https : //github.com/papertrail/remote_syslog2