新手问问题,关于Nodejs服务器的问题

新手问问题,关于Nodejs服务器的问题

我的服务器是linux,拥有root权限,我用root权限启动node服务,正常运行,然后我在本地关掉 终端(mac os),服务也就跟着停了,请问怎么解决?我听有人ssh强行关闭会把进程一起关掉,要用exit,但是我启动这node怎么输入ssh命令呢?求助。还有就是如果我这边断网了,即使终端没有关闭服务也会关闭。求救

7 回复

当然可以!你遇到的问题是因为当你关闭终端时,Node.js 进程也会随之被终止。这是因为终端关闭时,它会发送一个 SIGHUP(挂起信号)给所有子进程,导致它们被终止。为了解决这个问题,你可以使用一些工具来保持进程在后台运行。

解决方案 1: 使用 nohup 命令

nohup 是一个简单的方法,可以在你关闭终端后保持进程继续运行。

示例代码:

nohup node your_server.js &

解释:

  • nohup:忽略挂起信号。
  • your_server.js:你的 Node.js 应用程序文件。
  • &:将进程放到后台运行。

查看日志文件:

默认情况下,nohup 会将输出重定向到 nohup.out 文件中。你可以通过以下命令查看日志:

tail -f nohup.out

解决方案 2: 使用 pm2 管理进程

pm2 是一个更强大的进程管理工具,它可以更好地管理 Node.js 应用程序,并提供更多的功能,如自动重启、负载均衡等。

安装 pm2

npm install pm2 -g

启动应用

pm2 start your_server.js

解释:

  • pm2 start your_server.js:启动你的 Node.js 应用程序。
  • pm2 会自动处理挂起信号和其他常见问题。

保存当前进程状态

pm2 save

查看应用状态

pm2 list

如果你断网了,但仍然想保持应用运行,可以考虑以下方法:

  1. 使用 tmuxscreen:这些工具允许你在多个会话之间切换,并且即使你断开连接,会话仍然保持运行。

    • 安装 tmux

      sudo apt-get install tmux
      
    • 创建一个新的 tmux 会话并启动 Node.js 应用:

      tmux new-session -s mysession
      node your_server.js
      
    • 断开连接后,可以重新连接到 tmux 会话:

      tmux attach -t mysession
      

希望这些方法能帮助你解决问题!


这个是常见问题, 貌似终端打开的程序父进程是终端的, 终端退出跟着退出了 一个方案是用 byobu screen 那样的终端, 一直在服务器上保持登录状态 http://blog.csdn.net/lqhbupt/article/details/7786153 另外是用其他工具在后台部署 Node 进程的服务, 比如 forever 命令 http://www.bishen.org/content/25925993071 http://stackoverflow.com/questions/6524716/using-forever-with-node-js 服务器上程序部署还有更多的方案可以选… 等待高人深入讲

还没实践到这里,先学习一下。。。

可以使用nohup命令 nohup node app >out.txt &

&代表 后台运行 >out.txt 表示将错误输出至 out.txt

nohup 正解

这种方式启动的服务,如何关闭呢?

又去有回才安心。

对于你的问题,主要是因为你在本地终端中直接启动了Node.js服务,一旦关闭终端,进程也会被终止。为了解决这个问题,可以使用以下几种方法:

方法一:使用nohup命令

你可以使用nohup命令来启动Node.js服务,这样即使关闭终端,服务也不会停止。

nohup node your_script.js &
  • nohup:表示不挂断地运行命令,即忽略SIGHUP信号。
  • &:表示将命令放到后台执行。

默认情况下,输出会被重定向到nohup.out文件。如果你希望输出到指定文件,可以这样做:

nohup node your_script.js > output.log 2>&1 &

方法二:使用screentmux

screentmux都是Linux中的终端复用工具,可以让你在一个物理终端上创建多个虚拟终端,并且即使你断开SSH连接,这些虚拟终端依然保持运行状态。

使用screen

  1. 启动一个新的screen会话:

    screen -S mysession
    
  2. 在该会话中启动Node.js服务:

    node your_script.js
    
  3. 按下Ctrl+A,再按D键,可以分离当前会话。

  4. 重新连接会话:

    screen -r mysession
    

使用tmux

  1. 启动一个新的tmux会话:

    tmux new -s mysession
    
  2. 在该会话中启动Node.js服务:

    node your_script.js
    
  3. 按下Ctrl+B,再按D键,可以分离当前会话。

  4. 重新连接会话:

    tmux attach -t mysession
    

方法三:使用forever

forever是一个Node.js模块,可以让你的Node.js应用作为守护进程运行,即使退出终端,应用仍然会持续运行。

  1. 安装forever

    npm install forever -g
    
  2. 使用forever启动Node.js服务:

    forever start your_script.js
    
  3. 查看所有正在运行的forever进程:

    forever list
    

通过以上方法,你可以确保Node.js服务即使在终端关闭或断网的情况下也能继续运行。

回到顶部