我确信这是一个非常愚蠢的问题,而且可能已经在这个网站上被问过十几次了,我只是不知道该搜索哪些关键字。我对管理服务器和命令行仍然很陌生,但这是我很久以来一直想尝试的事情。
现在我有一个 Ubuntu Server(没有 GUI),运行着一个 Node.js 网络服务器。
如何在命令行上执行其他命令的同时保持 Node 运行?
例如:
node /var/www/my_app.js
此命令阻止我运行其他命令,直到我使用 终止它Ctrl + C
。但如果我想在运行redis-cli
命令的同时让 Node 在后台运行,该怎么办?换句话说:
- 如何在不停止 Node 服务器的情况下退出 Node.js 上下文?
- 完成(1)之后,如何返回到 Node 上下文?
我不知道(2)对于该node
命令是否有意义,但是,例如,如果我运行nodemon
,我可以在运行rs
时运行(重新启动)命令。nodemon
谢谢,如果这是一个重复和/或非常明显的问题,我深表歉意。
答案1
如果您只是启动某个程序而不关心其寿命,那么建议的(setsid 等)就很好,但在生产中,您会使用适当的守护进程系统来监视和重生服务器进程。Ubuntu 附带 Upstart,因此我会考虑编写 Upstart 脚本。
将这样的内容保存到类似的地方/etc/init/mynodeapp.conf
:
description "My node.js app"
start on startup
stop on shutdown
respawn
exec sudo -u USER /usr/bin/node /var/www/my_app.js
用您想要运行的任何用户替换USER
该行,并确保二进制文件的路径完整且正确(将有助于确认)。如果您使用的是本地安装的版本,请确保它指向那里。exec
node
which node
一旦完成,sudo start mynodeapp
将启动它、sudo stop mynodeapp
停止它,并且各种其他 upstart 命令(restart
、status
等)将执行它们设计的任何操作。如果您不想让它在启动时启动,只需用 注释掉启动行即可#
。
这就是我在生产中会做的事情……你提到想要“返回到 Node 上下文”……这有点难。Upstart 甚至其他进程重定技术都会将你与进程分离。通常无法回到点燃的烟花。
如果您有一个需要处理的持续进程,那么您可能需要查看终端会话的更改。如果我真的需要您建议的内容,我会开始查看screen
。这样您就可以拥有多个悬挂终端,您可以分别从和重新连接它们。
这不是一个容易掌握的应用程序,但值得深入研究: