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 一样的“系统服务”。
这样做好处极多:
- 开机自启:VPS 重启后,网站自动复活。
- 崩溃重启:如果程序因为报错挂了,系统会自动帮你把它拉起来。
- 管理方便:可以用
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 保存退出。
第三步:通知系统并启动
-
刷新服务列表(让系统知道你加了个新文件):
sudo systemctl daemon-reload -
启动服务:
sudo systemctl start linebot_web -
设置开机自启(这就不用怕 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(实时查看报错输出)
这就是最专业的部署方式!