linux后台一直运行flask web


linux后台一直运行python web

没问题!这是 Linux 新手最容易遇到的困惑之一。

在 Linux 终端里,默认情况下,只要你关闭了 SSH 窗口(或者断网了),你运行的所有程序都会被系统强制杀掉

为了让你的 Flask 网站 24 小时在线,我们需要把它“剥离”出来,让它在后台独自运行。

方法一:使用 screen(最推荐新手,看得见摸得着)

screen 就像是在服务器里开了一个**“虚拟显示器”**。你可以在里面运行程序,然后“拔掉显示器线”(断开连接),程序依然在跑。下次你接上显示器,还能看到它。

1. 安装 screen

sudo apt install screen

2. 创建一个新窗口

给这个窗口起个名字,比如叫 myweb

screen -S myweb

你会发现屏幕闪了一下,好像清屏了。其实你已经进入了“虚拟世界”。

3. 运行你的程序

在这个新窗口里,像往常一样运行程序:

python3 server.py

你会看到屏幕上显示 “Running on http://0.0.0.0:8000”,程序正在运行中。

4. 关键步骤:暂离(Detach)

现在程序在跑了,怎么退出来呢?

  • 按住键盘上的 Ctrl 不放,同时按一下 A
  • 松开所有键。
  • 按一下 D

你会看到提示 [detached],然后回到了你原本的终端界面。 此时,你的 Flask 还在后台跑,你可以放心地关闭 SSH 窗口了。

5. 怎么回去看?

如果你以后想看看日志,或者想停止程序:

screen -r myweb

(恢复名为 myweb 的窗口)


方法二:使用 nohup(最简单粗暴,不管不问)

nohup 的意思是 “No Hang Up” (不挂断)。它是一个命令前缀。

1. 运行命令

直接输入下面这行“天书”:

nohup python3 server.py > flask.log 2>&1 &

命令拆解:

  • nohup ...: 告诉系统,就算我退出了 SSH,也不要杀掉这个进程。
  • > flask.log: 把程序打印的所有字(日志),都写到 flask.log 这个文件里(因为后台运行你看不到屏幕输出)。
  • 2>&1: 把“错误信息”也一起写进日志里。
  • & (最末尾): 意思是“立刻把它扔到后台去”,不要占用我的光标。

2. 怎么确认它在跑?

输入:

ps -ef | grep server.py

如果看到一行字包含 python3 server.py,说明它活着。

3. 怎么停止它?

因为它在后台,你不能按 Ctrl+C 停止。你需要先查到它的 PID (进程号),然后杀掉它。

  • 先运行上面的 ps -ef ...,你会看到类似 ubuntu 12345 ... 的数字。
  • 杀掉它:kill 12345

💡 终极推荐:像 Nginx 一样管理 (systemd)

使用 systemd 把你的 Python 网站变成像 Nginx 或 MySQL 一样的“系统服务”。 这样做好处极多:

  1. 开机自启:VPS 重启后,网站自动复活。
  2. 崩溃重启:如果程序因为报错挂了,系统会自动帮你把它拉起来。
  3. 管理方便:可以用 systemctl 命令统一管理。

请按以下步骤操作(假设你的 Web 服务脚本叫 server.py,文件夹在 /home/ubuntu/line_jp):

第一步:创建服务配置文件

我们需要在系统的服务目录里新建一个文件。在终端输入:

sudo nano /etc/systemd/system/linebot_web.service

第二步:写入配置内容

把下面的内容复制进去。 注意: 请仔细检查 User(用户名)和 WorkingDirectory(文件夹路径)是否和你实际的一致。如果你不是用 ubuntu 用户登录的,请改为你的用户名。

[Unit]
Description=My Line Bot Web Server
After=network.target

[Service]
# 运行服务的用户(如果你是用 root 登录的,就写 root;如果是 ubuntu,就写 ubuntu)
User=ubuntu
# 你的项目文件夹路径
WorkingDirectory=/home/ubuntu/line_jp
# 启动命令(注意要用 python3 的绝对路径,通常是 /usr/bin/python3)
ExecStart=/usr/bin/python3 server.py
# 总是自动重启(如果挂了)
Restart=always
# 重启间隔 5 秒
RestartSec=5

[Install]
# 开机启动级别
WantedBy=multi-user.target

Ctrl+O -> 回车 -> Ctrl+X 保存退出。


第三步:通知系统并启动

  1. 刷新服务列表(让系统知道你加了个新文件):

    sudo systemctl daemon-reload
  2. 启动服务

    sudo systemctl start linebot_web
  3. 设置开机自启(这就不用怕 VPS 重启了):

    sudo systemctl enable linebot_web

第四步:检查状态

输入以下命令,看看它是不是绿色的 active (running)

sudo systemctl status linebot_web
  • 如果是绿色:恭喜你!你的 Python 网站已经在这个 VPS 上“扎根”了。
  • 如果是红色:它会显示报错信息。通常是路径写错了(比如 Working Directory 不对)或者 server.py 代码里有错。

以后怎么管理?

以后你想重启网站(比如改了 server.py 的代码),就不用杀进程了,直接像操作 Nginx 一样:

  • 重启sudo systemctl restart linebot_web
  • 停止sudo systemctl stop linebot_web
  • 看日志journalctl -u linebot_web -f (实时查看报错输出)

这就是最专业的部署方式!