290 lines
8.8 KiB
Markdown
290 lines
8.8 KiB
Markdown
#ubuntu #linux #软件配置 #DeepSeek #freqtrade
|
||
|
||
## 第一部分 如何将进程放在后台运行
|
||
|
||
在Linux服务器中,将终端中正在运行的程序转入后台运行是常见的运维需求,以下是多种可靠的方法及其详细操作步骤,根据场景选择最合适的方案:
|
||
|
||
---
|
||
|
||
### 🔧 **一、基础方法:`Ctrl+Z` + `bg`(临时切换)**
|
||
|
||
**适用场景**:前台程序需临时转入后台,但**终端关闭后进程会终止**。
|
||
|
||
1. **暂停前台程序**:
|
||
- 程序运行时,按 `Ctrl+Z` 组合键,进程会暂停并显示作业号(如 `[1]+ Stopped ./your_command`)[2,4](https://tencent.yuanbao/@ref)。
|
||
2. **转入后台继续运行**:
|
||
- 执行 `bg %作业号`(如 `bg %1`),进程将在后台恢复运行[1,5](https://tencent.yuanbao/@ref)。
|
||
- 若省略作业号,默认操作最近暂停的进程。
|
||
3. **查看后台任务**:
|
||
- `jobs -l` 显示当前终端的所有后台作业及PID[4](https://tencent.yuanbao/@ref)。
|
||
|
||
> ⚠️ **局限**:终端关闭后进程终止,仅适合临时任务。
|
||
|
||
---
|
||
|
||
### 🔒 **二、持久化方案:脱离终端控制**
|
||
|
||
**适用场景**:需终端关闭后进程仍持续运行(如SSH断开场景)。
|
||
|
||
#### **1. `nohup` + `&`(推荐)**
|
||
|
||
- **启动时直接后台运行**:
|
||
|
||
```
|
||
nohup your_command > output.log 2>&1 &
|
||
```
|
||
|
||
- `nohup` 忽略SIGHUP信号,避免终端关闭时进程终止[6,7](https://tencent.yuanbao/@ref)。
|
||
- `> output.log 2>&1` 将标准输出和错误重定向到文件(默认 `nohup.out`)[3,8](https://tencent.yuanbao/@ref)。
|
||
|
||
#### **2. 对已运行进程:`disown`**
|
||
|
||
- 若程序已用 `&` 启动,先查作业号:
|
||
|
||
```
|
||
jobs -l # 记录作业号(如 %1)
|
||
```
|
||
|
||
- 解除进程与终端的关联:
|
||
|
||
```
|
||
disown %1 # 或 disown -h %1 保留作业记录[3,7](@ref)
|
||
```
|
||
|
||
|
||
---
|
||
|
||
### 🖥️ **三、高级会话管理:`screen`/`tmux`**
|
||
|
||
**适用场景**:需交互式操作或重新连接会话(如监控日志、调试)。
|
||
|
||
#### **1. `screen` 操作流程**:
|
||
|
||
```
|
||
screen -S session_name # 创建会话
|
||
your_command # 在会话中运行程序
|
||
Ctrl+A → D # 分离会话(后台保持运行)
|
||
screen -r session_name # 重新连接会话[9,10](@ref)
|
||
```
|
||
|
||
#### **2. `tmux` 操作流程**:
|
||
|
||
```
|
||
tmux new -s session_name # 新建会话
|
||
your_command # 运行程序
|
||
Ctrl+B → D # 分离会话
|
||
tmux attach -t session_name # 重新连接[10](@ref)
|
||
```
|
||
|
||
> ✅ **优势**:支持多窗口、会话共享,断网后仍可恢复操作。
|
||
|
||
---
|
||
|
||
### ⚙️ **四、系统服务托管(`systemd`)**
|
||
|
||
**适用场景**:生产环境长期服务(如Web服务器、数据库)。
|
||
|
||
1. 创建服务文件:
|
||
|
||
```
|
||
sudo nano /etc/systemd/system/your_service.service
|
||
```
|
||
|
||
2. 写入配置:
|
||
|
||
```
|
||
[Unit]
|
||
Description=Your Service
|
||
[Service]
|
||
ExecStart=/path/to/your_command
|
||
Restart=always
|
||
User=your_user
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
|
||
3. 启动并开机自启:
|
||
|
||
```
|
||
sudo systemctl daemon-reload
|
||
sudo systemctl start your_service
|
||
sudo systemctl enable your_service
|
||
```
|
||
|
||
- 日志通过 `journalctl -u your_service` 查看[7](https://tencent.yuanbao/@ref)。
|
||
|
||
---
|
||
|
||
### 💎 **方法对比与选择建议**
|
||
|
||
|**方法**|终端关闭后存活|日志管理|适用场景|
|
||
|---|---|---|---|
|
||
|`Ctrl+Z` + `bg`|❌|无|临时后台任务|
|
||
|`nohup`|✅|需重定向文件|非交互式长期任务|
|
||
|`disown`|✅|依赖启动时配置|已启动进程的持久化|
|
||
|`screen/tmux`|✅|可实时查看|需交互或重新连接的复杂任务|
|
||
|`systemd`|✅|系统统一管理|生产环境服务、开机自启|
|
||
|
||
---
|
||
|
||
### ⚠️ **关键注意事项**
|
||
|
||
1. **资源监控**:
|
||
- 后台进程需定期检查资源占用:`top -p PID` 或 `htop`[7](https://tencent.yuanbao/@ref)。
|
||
2. **进程终止**:
|
||
- 通过 `kill -9 PID` 强制终止(先 `ps aux | grep 进程名` 查PID)[1,6](https://tencent.yuanbao/@ref)。
|
||
3. **输出处理**:
|
||
- 无重定向时,`nohup` 默认输出到 `nohup.out`,需定期清理防止磁盘占满[7](https://tencent.yuanbao/@ref)。
|
||
4. **权限问题**:
|
||
- `systemd` 服务需注意用户权限,避免因权限不足启动失败。
|
||
|
||
---
|
||
|
||
**总结**:临时任务用 `Ctrl+Z + bg`,持久运行选 `nohup` 或 `disown`,交互任务用 `screen/tmux`,生产服务用 `systemd`。掌握这些方法,可灵活应对各类后台任务管理需求!
|
||
```bash
|
||
ps aux | grep "进程名或关键词"
|
||
```
|
||
|
||
|
||
|
||
|
||
|
||
---
|
||
|
||
## 第二部分 如何重新连接后台的进程
|
||
|
||
在Linux服务器中,后台进程通常指通过`&`、`nohup`或终端复用工具(如`screen`/`tmux`)启动的进程。若需“进入”后台进程(如查看实时输出、交互操作或恢复会话),可通过以下方法实现:
|
||
### ⚙️ **一、通过终端复用工具重新连接会话**
|
||
|
||
适用于使用 **`screen`** 或 **`tmux`** 启动的后台进程。
|
||
|
||
1. **`screen` 会话恢复**
|
||
- 查看所有后台会话:
|
||
|
||
```
|
||
screen -ls
|
||
# 示例输出:12345.session_name (Detached)
|
||
```
|
||
|
||
- 重新连接会话:
|
||
|
||
```
|
||
screen -r 12345 # 使用会话ID或名称
|
||
```
|
||
|
||
- 若会话被占用(状态为`Attached`),先强制断开再连接:
|
||
|
||
```
|
||
screen -d 12345 # 断开会话
|
||
screen -r 12345 # 重新连接
|
||
[1,5](@ref)
|
||
```
|
||
|
||
2. **`tmux` 会话恢复**
|
||
- 查看会话列表:
|
||
|
||
```
|
||
tmux list-sessions
|
||
# 示例输出:session_name: 1 windows (created Tue Jul 2 14:00:00 2025)
|
||
```
|
||
|
||
- 连接指定会话:
|
||
|
||
```
|
||
tmux attach -t session_name
|
||
```
|
||
|
||
- 若需新窗口操作后返回原进程,按`Ctrl+B + D`分离会话[1,5](https://tencent.yuanbao/@ref)。
|
||
|
||
---
|
||
|
||
### 🔄 **二、将后台任务调入前台**
|
||
|
||
适用于通过 **`&`** 或 **`jobs`** 管理的后台任务(仅限当前终端会话有效)。
|
||
|
||
1. 查看当前终端后台任务列表:
|
||
|
||
```
|
||
jobs -l
|
||
# 输出示例:[1] 54321 Running python app.py &
|
||
```
|
||
|
||
2. 将任务调入前台:
|
||
|
||
```
|
||
fg %1 # %1 对应任务编号
|
||
```
|
||
|
||
3. 操作后需返回后台时:
|
||
- 按`Ctrl+Z`暂停任务
|
||
- 执行`bg %1`继续后台运行[1,5,9](https://tencent.yuanbao/@ref)。
|
||
|
||
---
|
||
|
||
### 📡 **三、通过管道查看实时输出**
|
||
|
||
适用于 **`nohup`** 启动的进程或需监控日志的场景。
|
||
|
||
1. 动态查看日志文件:
|
||
|
||
```
|
||
tail -f nohup.out # 默认输出文件
|
||
tail -f /path/to/app.log # 自定义日志路径
|
||
```
|
||
|
||
2. 若需交互(如输入命令),但进程未设计交互接口,此方法仅支持**只读查看**[1,6](https://tencent.yuanbao/@ref)。
|
||
|
||
---
|
||
|
||
### 🔍 **四、查找后台进程信息**
|
||
|
||
若不确定进程状态,先定位进程:
|
||
|
||
- **列出所有脱离终端的进程**:
|
||
|
||
```
|
||
ps aux | grep -v 'TTY' | grep <进程名>
|
||
```
|
||
|
||
- **按名称查PID**:
|
||
|
||
```
|
||
pgrep -l <进程名>
|
||
```
|
||
|
||
- **树形结构分析**:
|
||
|
||
```
|
||
pstree -p | grep <进程名>
|
||
```
|
||
|
||
获取PID后,结合前述方法操作[6,7,8](https://tencent.yuanbao/@ref)。
|
||
|
||
---
|
||
|
||
### 💎 **方法对比与适用场景**
|
||
|
||
|**方法**|**适用条件**|**能否交互**|**终端关闭后是否有效**|
|
||
|---|---|---|---|
|
||
|`screen`/`tmux`|启动时使用复用工具|✅ 支持|✅ 是|
|
||
|`fg`/`jobs`|当前终端启动的后台任务|✅ 支持|❌ 否(终端退出失效)|
|
||
|`tail -f`|任何写入日志的后台进程|❌ 只读|✅ 是|
|
||
|
||
---
|
||
|
||
### ⚠️ **注意事项**
|
||
|
||
1. **权限问题**:
|
||
- 恢复`screen`/`tmux`会话需**同一用户**操作。
|
||
2. **进程状态**:
|
||
- `STAT`列含`T`(停止状态)的进程需先用`bg`唤醒再操作[9,10](https://tencent.yuanbao/@ref)。
|
||
3. **生产环境建议**:
|
||
- 长期服务推荐用**Systemd托管**(通过`journalctl -u service名`查看日志),避免会话依赖[1,11](https://tencent.yuanbao/@ref)。
|
||
|
||
> 优先尝试 **`screen -r`** 或 **`tmux attach`**,若无效则通过日志监控(`tail -f`)或唤醒暂停任务(`bg + fg`)。日常运维中养成**使用终端复用工具**的习惯,可显著简化后台进程管理。
|
||
|
||
---
|
||
|
||
## 第三部分 进程终止:
|
||
|
||
通过 `kill -9 PID` 强制终止(先 `ps aux | grep 进程名` 查PID)[1,6](https://tencent.yuanbao/@ref)。 |