00350 后台优雅地运行服务器


前言

后台优雅地运行服务器。

Operating System: Ubuntu 22.04.4 LTS

介绍

要在后台优雅地运行服务器,并确保关闭 VS Code SSH 连接后服务持续运行,可以使用以下方法:

方法 1:使用 nohup(简单推荐)

nohup 命令 > 日志文件 2>&1 &
  • 示例

    nohup python app.py > app.log 2>&1 &
  • 说明

    • nohup:忽略挂断信号(关闭 SSH 时不终止进程)
    • > app.log:将标准输出重定向到日志文件
    • 2>&1:将错误输出合并到标准输出
    • &:后台运行
  • 验证:运行后显示 [1] 12345(12345 为 PID),可关闭 SSH


方法 2:使用 screen / tmux(推荐交互式操作)

使用 screen

  1. 创建会话:

    screen -S my_server
  2. 在会话中启动服务:

    python app.py
  3. Ctrl+A 再按 D 脱离会话

  4. 关闭 SSH 后恢复会话:

    screen -r my_server

使用 tmux(更现代):

  1. 创建会话:

    tmux new -s my_server
  2. 启动服务后按 Ctrl+B 再按 D 脱离

  3. 恢复:

    tmux attach -t my_server

方法 3:使用 systemd(生产环境推荐)

  1. 创建服务文件:

    sudo nano /etc/systemd/system/myapp.service
  2. 写入配置:

    [Unit]
    Description=My Python App
    
    [Service]
    User=your_username
    WorkingDirectory=/path/to/app
    ExecStart=/usr/bin/python app.py
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
  3. 启用服务:

    sudo systemctl daemon-reload
    sudo systemctl start myapp
    sudo systemctl enable myapp  # 开机自启
  4. 查看状态:

    systemctl status myapp

验证进程存活

  • 关闭 VS Code SSH 后重新连接,检查进程:

    ps aux | grep app.py     # 查看进程
    pgrep -f "app.py"        # 获取 PID

注意事项

  1. 日志管理

    • 使用 nohup 时定期清理 nohup.out 或自定义日志路径
    • systemd 日志可通过 journalctl -u myapp 查看
  2. 资源监控

    top -p $(pgrep -f "app.py")  # 动态监控资源
  3. 端口检查

    netstat -tuln | grep 8000    # 检查服务端口

总结推荐

  • 临时测试:用 nohupscreen
  • 长期运行:用 systemd(自动重启+集中管理)
  • 交互调试:用 tmux(支持多窗口+会话持久化)

💡 关闭 VS Code SSH 时,确保不要直接关闭终端窗口,而是输入 exit 或点击正常断开按钮,避免强制终止进程。

详细指南:使用 screen 优雅地后台运行服务器

screen 是一个强大的终端复用工具,允许你在单个终端会话中创建多个虚拟终端,并在断开 SSH 连接后保持进程运行。

1. 安装 screen

大多数 Linux 发行版已预装 screen。若未安装:

# Ubuntu/Debian
sudo apt update && sudo apt install screen

# CentOS/RHEL
sudo yum install screen

2. 基础使用

创建新会话

screen -S myserver  # 创建名为 "myserver" 的会话

在会话中运行服务器

# 例如运行 Python Flask 应用
python app.py

# 或 Node.js 应用
node server.js

暂时离开会话(保持后台运行)

按下 Ctrl + A,然后按 D

屏幕会显示:[detached from 12345.myserver](12345 是会话 ID)

重新连接会话

screen -r myserver  # 使用名称连接
# 或
screen -r 12345     # 使用会话 ID 连接

查看所有会话

screen -ls

输出示例:

There are screens on:
	12345.myserver	(Detached)
	67890.other	(Attached)

3. 高级功能

创建多个窗口

  • 在会话中按 Ctrl+A 然后 C - 创建新窗口
  • Ctrl+A 然后 N - 切换到下一个窗口
  • Ctrl+A 然后 P - 切换到上一个窗口
  • Ctrl+A 然后 " - 查看窗口列表

分屏操作

  • Ctrl+A 然后 | - 垂直分屏
  • Ctrl+A 然后 S - 水平分屏
  • Ctrl+A 然后 Tab - 在分屏间切换
  • Ctrl+A 然后 X - 关闭当前分屏

滚动查看历史

  1. Ctrl+A 然后 [
  2. 使用方向键或 PageUp/PageDown 滚动
  3. Esc 退出滚动模式

会话管理

# 暂时离开会话但不关闭
screen -d myserver

# 关闭会话(需在会话内部)
exit

# 从外部结束会话
screen -X -S myserver quit

4. 实用工作流程示例

持久化运行 Web 服务器

# 创建会话
screen -S webserver

# 在会话中运行服务器
python app.py

# 离开会话 (Ctrl+A 然后 D)

# 断开 SSH 连接
exit

稍后重新连接查看日志

# 重新 SSH 连接
ssh user@server

# 查看会话列表
screen -ls

# 重新连接会话
screen -r webserver

5. 配置优化

创建 ~/.screenrc 配置文件

# 启用状态栏
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B}%Y-%m-%d %{W}%c %{g}]'

# 设置滚动缓冲区大小
defscrollback 5000

# 启用鼠标滚动支持
termcapinfo xterm* ti@:te@

# 设置启动消息
startup_message off

常用快捷键参考

快捷键 功能
Ctrl+A 然后 C 创建新窗口
Ctrl+A 然后 D 脱离当前会话
Ctrl+A 然后 0-9 切换到指定编号窗口
Ctrl+A 然后 K 关闭当前窗口
Ctrl+A 然后 \ 关闭所有窗口并退出
Ctrl+A 然后 ? 查看所有快捷键

6. 最佳实践

  1. 命名规范:使用有意义的会话名称(如 web-proddb-backup
  2. 日志记录:结合重定向记录输出
    screen -S myserver -L -Logfile server.log
  3. 会话恢复:意外断开后使用 screen -d -r myserver 恢复
  4. 权限管理:多用户环境下使用 screen -x 共享会话
  5. 资源监控:在另一个窗口中运行 htop 监控资源使用

7. 替代方案:tmux

tmux 是更现代的替代品,功能更强大:

# 安装 tmux
sudo apt install tmux  # Ubuntu/Debian
sudo yum install tmux  # CentOS/RHEL

# 基本使用
tmux new -s mysession  # 创建会话
Ctrl+B 然后 D          # 脱离会话
tmux attach -t mysession # 重新连接

screentmux 都是优秀的选择,screen 更轻量简单,tmux 功能更丰富。

通过掌握这些技巧,你可以轻松地在服务器上运行持久化进程,即使关闭 VS Code 的 SSH 连接也不会中断服务。

结语

第三百五十篇博文写完,开心!!!!

今天,也是充满希望的一天。


文章作者: LuYF-Lemon-love
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 LuYF-Lemon-love !
  目录