在服务器上启动多个程序是一个常见的需求,比如运行多个 Web 服务、后台任务、微服务等。下面是一些常用的方法和工具来实现这个目标,适用于 Linux 系统(如 Ubuntu、CentOS):
🧩 方法一:使用 Shell 启动多个程序
1. 前台运行多个命令
# 使用 & 在后台运行每个程序
program1 & program2 & program3 &
示例:
python3 app1.py & node server.js & java -jar myapp.jar &
注意: 如果终端关闭,这些进程会终止。
2. 使用 nohup 避免中断
nohup python3 app1.py > app1.log 2>&1 &
nohup node server.js > server.log 2>&1 &
nohup表示“不挂断”,即使终端关闭也能继续运行。> app1.log 2>&1表示将标准输出和错误输出重定向到文件。
🛠️ 方法二:使用 Screen 或 Tmux(虚拟终端)
1. 使用 screen
安装(如果未安装):
sudo apt install screen
使用步骤:
screen -S session_name # 创建一个新会话
python3 app1.py # 运行第一个程序
Ctrl+A 然后按 D # 分离当前会话
screen -r session_name # 重新连接会话
你可以创建多个 screen 会话运行不同的程序。
2. 使用 tmux
安装:
sudo apt install tmux
使用示例:
tmux new -s app1
python3 app1.py
Ctrl+B 然后按 D # 分离会话
tmux attach -t app1 # 重新连接
🧰 方法三:使用系统服务管理(推荐)
使用 systemd 来管理多个服务(适合生产环境)
示例:创建一个 systemd 服务文件
sudo nano /etc/systemd/system/app1.service
内容如下:
[Unit]
Description=My App 1
[Service]
ExecStart=/usr/bin/python3 /path/to/app1.py
WorkingDirectory=/path/to/
Restart=always
User=your_username
[Install]
WantedBy=multi-user.target
保存后启用并启动服务:
sudo systemctl daemon-reload
sudo systemctl enable app1
sudo systemctl start app1
你为每个程序创建一个 .service 文件即可。
🧱 方法四:使用 Docker 容器化部署
如果你的多个程序可以容器化,Docker 是一种非常优雅的方式。
示例:使用 docker-compose 同时启动多个服务
创建 docker-compose.yml 文件:
version: '3'
services:
webapp:
image: my-web-app
ports:
- "8000:8000"
backend:
image: my-backend
ports:
- "3000:3000"
然后运行:
docker-compose up -d
📋 查看运行中的程序
ps aux | grep python
ps aux | grep node
或者查看所有后台任务:
jobs
✅ 总结
| 方法 | 是否持久运行 | 是否推荐 | 适用场景 |
|---|---|---|---|
& + nohup |
✅ | ✅ | 快速测试 |
screen / tmux |
✅ | ✅✅ | 开发调试 |
systemd |
✅✅ | ✅✅✅ | 生产环境 |
docker-compose |
✅✅ | ✅✅✅ | 多服务部署 |
如果你能提供更具体的需求(例如:是什么类型的程序?是否需要开机自启?是否要日志管理?),我可以给出更定制化的建议。
CLOUD技术博