我最近获得了一个节点应用程序并在digitalocean的droplet上运行。一切正常,如果我在服务器javascript文件上forever
,我可以导航到该网站,它可以工作。
如果我关闭了我正在搜索的终端窗口,该网站将不再可用,这当然是预期的。但我的问题是,如何运行forever
作为各种守护进程?
我无法在任何地方找到答案,这真的很奇怪...希望有人在这里可以帮助我
答案 0 :(得分:1)
如果您将其设置为后台任务并且不要关闭它,通常永远应该继续运行。不幸的是,如果服务器需要重新启动(这可能经常发生),你需要一些东西才能重新启动它。
永远的另一种选择是pm2,几乎是一回事。有一个关于如何设置生产服务器here的教程。以下是该网站仅针对pm2部分的摘录,因为我假设您已将所有其他内容排序:
现在我们将安装PM2,它是Node.js应用程序的进程管理器。 PM2提供了一种简单的方法来管理和守护应用程序(将它们作为服务运行)。
我们将使用Node Packaged Modules(NPM),它基本上是与Node.js一起安装的Node模块的包管理器,用于在我们的app服务器上安装PM2。使用此命令安装PM2:
sudo npm install pm2 -g
PM2简单易用。我们将介绍PM2的一些基本用途。
您要做的第一件事是使用pm2 start命令在后台运行您的应用程序hello.js:
pm2 start hello.js
这也会将您的应用程序添加到PM2的进程列表中,每次启动应用程序时都会输出该列表
PM2自动分配应用名称(基于文件名,不带.js扩展名)和PM2 ID。 PM2还维护其他信息,例如进程的PID,其当前状态和内存使用情况。
如果应用程序崩溃或被杀死,则在PM2下运行的应用程序将自动重新启动,但需要执行额外步骤以使应用程序在系统启动(启动或重新启动)时启动。幸运的是,PM2提供了一种简单的方法,即启动子命令。
startup子命令生成并配置启动脚本,以在服务器启动时启动PM2及其托管进程。在我们的例子中,您还必须指定运行的平台,即ubuntu:
pm2 startup ubuntu
结果输出的最后一行将包含一个必须运行的命令(必须以超级用户权限运行):
输出:
[PM2] You have to run this command as root
[PM2] Execute the following command :
[PM2] sudo env PATH=$PATH:/usr/local/bin pm2 startup ubuntu -u sammy
运行生成的命令(类似于上面突出显示的输出)将PM2设置为在启动时启动(使用您自己的输出中的命令):
sudo env PATH=$PATH:/usr/local/bin pm2 startup ubuntu -u sammy