服务器上启动多个程序?

在服务器上启动多个程序是一个常见的需求,比如运行多个 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技术博 » 服务器上启动多个程序?