在Linux服务器上同时运行多个代码实例有多种方法,以下是常见方案:
一、基础方法
1. 后台运行
# 使用 & 符号
python script.py &
node app.js &
# 查看后台任务
jobs
# 带回终端
fg %1
# 脱离终端运行(nohup)
nohup python script.py > output.log 2>&1 &
2. 使用 screen/tmux
# screen
screen -S mysession
# 运行程序后按 Ctrl+A D 分离
screen -r mysession # 重新连接
# tmux(更现代)
tmux new -s mysession
# 运行程序后按 Ctrl+B D 分离
tmux attach -t mysession
二、进程管理工具
1. systemd(系统服务)
# /etc/systemd/system/myapp.service
[Unit]
Description=My Application
[Service]
Type=simple
ExecStart=/usr/bin/python3 /path/to/app.py
Restart=always
User=myuser
[Install]
WantedBy=multi-user.target
sudo systemctl start myapp
sudo systemctl enable myapp
2. Supervisor
# /etc/supervisor/conf.d/myapp.conf
[program:myapp]
command=python3 app.py
directory=/path/to/app
autostart=true
autorestart=true
user=myuser
numprocs=4 # 启动4个实例
process_name=%(program_name)s_%(process_num)02d
3. PM2(Node.js专用)
npm install -g pm2
pm2 start app.js -i 4 # 启动4个实例
pm2 list
pm2 monit
三、容器化方案
1. Docker Compose
version: '3'
services:
app1:
image: myapp:latest
restart: always
app2:
image: myapp:latest
restart: always
2. Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp
spec:
replicas: 3 # 3个实例
template:
spec:
containers:
- name: myapp
image: myapp:latest
四、高级方案
1. 负载均衡多实例
# 使用Nginx反向XX
upstream app_servers {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
}
server {
location / {
proxy_pass http://app_servers;
}
}
2. 并行启动脚本
#!/bin/bash
# start_multiple.sh
for i in {1..5}; do
PORT=$((8000 + i))
python app.py --port=$PORT &
echo "启动实例 $i,端口 $PORT"
done
# 等待所有进程
wait
五、最佳实践建议
-
根据需求选择工具:
- 简单测试:
&或screen - 生产环境:
systemd或supervisor - 微服务架构:Docker/Kubernetes
- 简单测试:
-
资源管理:
# 使用taskset绑定CPU核心 taskset -c 0,1 python app.py & # 使用nice调整优先级 nice -n 10 python low_priority.py & -
监控和管理:
# 查看所有实例 ps aux | grep app.py # 查看资源使用 htop pidstat -p <PID> -
日志分离:
# 每个实例独立日志 python app.py --port=8000 > app_8000.log 2>&1 & python app.py --port=8001 > app_8001.log 2>&1 &
选择哪种方案取决于你的具体需求:实例数量、是否需要持久运行、是否需要自动重启、以及运维复杂度要求。
CLOUD技术笔记