程序占用
如果你在关闭终端后重新运行 node server.js
,但提示端口 3000
被占用,说明之前的服务器进程仍然在后台运行。以下是解决方法:
1. 检查后台运行的 Node.js 进程
首先,检查是否有 Node.js 进程正在占用端口 3000
。
在 Linux/macOS 上
BASH
lsof -i :3000
输出示例:
TEXT
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 12345 user 20u IPv6 12345 0t0 TCP *:3000 (LISTEN)
5
2. 终止占用端口的进程
找到占用端口的进程 ID(PID),然后终止该进程。
BASH
kill -9 <PID>
例如,如果 PID 是 12345
,运行:
BASH
kill -9 12345
3. 使用 pm2
pm2
和其他依赖包要求 Node.js 版本至少为 12.0.0
或更高。如果版本过低需要升级
-
使用
n
模块升级 Node.js:BASH
sudo npm install -g
n sudo n stable
2.检查是否版本已经更新
node --version
3.如果没有显示更新,刷新当前shell的环境变量
hash -r
4.再次验证版本
node --version
启动之前查看当前端口是否占用,如果占用删除进程
lsof -i :3000
kill -9 PID
如果你使用 pm2
启动了 Node.js 服务器,可以通过它们的命令重新启动服务器。
使用 pm2
:
- 查看所有运行中的进程:
BASH
pm2 list
- 停止并删除进程:
BASH
pm2 delete server
- 重新启动服务器:
BASH
pm2 start server.js
4. 检查服务器是否已启动
在终止占用端口的进程后,重新运行 node server.js
,确保服务器成功启动。
命令
BASH
node server.js
检查方法:
- 如果服务器成功启动,你应该会看到类似以下的输出:
TEXT
Server is running on http://localhost:3000
Node.js 服务器在后台运行:
1. 使用 &
符号在后台运行
你可以在命令末尾添加 &
符号,将 Node.js 服务器放到后台运行。
命令:
BASH
node server.js &
说明:
- 这样即使你关闭终端,服务器仍然会在后台运行。
- 你可以通过
jobs
命令查看后台运行的任务。
2. 使用 nohup
命令
nohup
命令可以让进程在终端关闭后继续运行。
命令:
BASH
nohup node server.js &
说明:
- 输出会被重定向到
nohup.out
文件中。 - 即使你关闭终端,服务器仍然会保持运行。
3. 使用 screen
或 tmux
工具
screen
和 tmux
是终端多路复用工具,可以让你在后台运行长时间的任务。
安装 screen
:
BASH
sudo apt install screen
使用 screen
:
- 创建一个新的
screen
会话:BASH
screen -S myserver
- 在
screen
会话中启动 Node.js 服务器:BASH
node server.js
- 按
Ctrl + A
然后按D
,退出screen
会话,但服务器仍然在后台运行。 - 重新连接到
screen
会话:BASH
screen -r myserver
4. 使用 pm2
进程管理工具
pm2
是一个强大的 Node.js 进程管理工具,支持自动重启、日志管理等功能。
安装 pm2
:
BASH
npm install -g pm2
使用 pm2
启动服务器:
BASH
pm2 start server.js
其他常用命令:
- 查看运行中的进程:
BASH
pm2 list
- 停止服务器:
BASH
pm2 stop server
- 删除服务器:
BASH
pm2 delete server
5. 使用 forever
工具
forever
是另一个简单的 Node.js 进程管理工具。
安装 forever
:
BASH
npm install -g forever
使用 forever
启动服务器:
BASH
forever start server.js
其他常用命令:
- 查看运行中的进程:
BASH
forever list
- 停止服务器:
BASH
forever stop server.js
以下是让 Node.js 服务器在后台运行的方法:
方法 | 命令示例 |
---|---|
后台运行 (& ) | node server.js & |
使用 nohup | nohup node server.js & |
使用 screen | screen -S myserver |
使用 pm2 | pm2 start server.js |
使用 forever | forever start server.js |