我怎样才能保持某些程序运行但运行其他终端命令?

我怎样才能保持某些程序运行但运行其他终端命令?

我确信这是一个非常愚蠢的问题,而且可能已经在这个网站上被问过十几次了,我只是不知道该搜索哪些关键字。我对管理服务器和命令行仍然很陌生,但这是我很久以来一直想尝试的事情。

现在我有一个 Ubuntu Server(没有 GUI),运行着一个 Node.js 网络服务器。

如何在命令行上执行其他命令的同时保持 Node 运行?

例如:

node /var/www/my_app.js

此命令阻止我运行其他命令,直到我使用 终止它Ctrl + C。但如果我想在运行redis-cli命令的同时让 Node 在后台运行,该怎么办?换句话说:

  1. 如何在不停止 Node 服务器的情况下退出 Node.js 上下文?
  2. 完成(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该行,并确保二进制文件的路径完整且正确(将有助于确认)。如果您使用的是本地安装的版本,请确保它指向那里。execnodewhich node

一旦完成,sudo start mynodeapp将启动它、sudo stop mynodeapp停止它,并且各种其他 upstart 命令(restartstatus等)将执行它们设计的任何操作。如果您不想让它在启动时启动,只需用 注释掉启动行即可#


这就是我在生产中会做的事情……你提到想要“返回到 Node 上下文”……这有点难。Upstart 甚至其他进程重定技术都会将你与进程分离。通常无法回到点燃的烟花。

如果您有一个需要处理的持续进程,那么您可能需要查看终端会话的更改。如果我真的需要您建议的内容,我会开始查看screen。这样您就可以拥有多个悬挂终端,您可以分别从和重新连接它们。

这不是一个容易掌握的应用程序,但值得深入研究:

相关内容