#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)。