在日常开发和运维中,我们常常会遇到需要将 Flask 项目部署到 Linux 服务器上,并确保其在后台持续稳定运行的需求。本文将详细记录我在将 Flask 项目的启动方式从python3 run.py转换为使用nohup命令启动的过程,以及后续如何关闭该服务的操作。
背景
我开发了一个基于 Flask 框架的 Web 项目,并成功上传到了 Linux 服务器上。起初,我通过python3 run.py命令来启动项目,此时项目能够正常访问,一切看似顺利。然而,当我关闭 SSH 连接或者切换到其他项目操作时,就无法再访问该 Flask 项目了。这是因为python3 run.py这种方式启动的项目,其生命周期依赖于当前的 SSH 会话,一旦会话结束,项目进程也会随之终止。为了解决这个问题,让项目能够在后台持续运行,不受 SSH 会话状态的影响,我决定使用nohup命令来重新启动项目。
使用 nohup 命令启动 Flask 项目
步骤
切换到项目目录:通过 SSH 登录到服务器后,首先使用cd命令切换到 Flask 项目所在的目录。例如,如果我的项目存放在/home/user/flask_project目录下,那么执行命令cd /home/user/flask_project。
执行 nohup 命令:在项目目录下,执行nohup命令来启动 Flask 项目。命令格式为nohup python3 run.py &。这里的nohup是 “no hang up” 的缩写,意为不挂断,使用该命令启动程序后,程序会忽略挂断信号(SIGHUP),从而在用户退出 SSH 会话或者关闭终端后,仍然能够继续在后台运行。&符号的作用是将该命令放入后台执行,这样当前终端就不会被占用,可以继续执行其他操作。
查看输出日志:执行上述命令后,终端会输出nohup: ignoring input and appending output to 'nohup.out'。这表示nohup命令已经忽略了终端输入,并将程序的输出内容追加到了当前目录下的nohup.out文件中。我们可以通过查看这个文件来了解项目的运行状态和输出信息。例如,使用tail -f nohup.out命令可以实时查看nohup.out文件的末尾内容,方便我们监控项目的运行情况,及时发现可能出现的错误信息。
关闭使用 nohup 启动的 Flask 项目
当我们需要对项目进行更新、维护或者出于其他原因需要停止 Flask 项目运行时,就需要关闭使用nohup启动的项目进程。关闭的步骤如下:
查找进程 ID(PID):使用ps -ef | grep python3命令来查找当前正在运行的 Python3 进程。在输出结果中,找到与我们的 Flask 项目相关的进程行,通常该行会包含run.py字样。例如,输出结果可能如下:
TypeScript取消自动换行复制
user 12345 67890 0 10:30 pts/0 00:00:00 python3 run.py
这里的12345就是我们要找的 Flask 项目进程的 ID(PID)。
2. 终止进程:找到进程 ID 后,使用kill命令来终止该进程。命令格式为kill -9 PID,其中PID替换为我们在上一步查找到的具体进程 ID。例如,对于上述例子中的进程,执行kill -9 12345命令,即可强制终止 Flask 项目的进程。这里使用-9参数是因为它会发送 SIGKILL 信号,确保进程被立即终止,即使进程处于无法响应其他信号的状态,也能被成功关闭。
通过以上步骤,我们成功地将 Flask 项目的启动方式从依赖 SSH 会话的python3 run.py转换为使用nohup命令在后台运行,并掌握了如何关闭该服务的方法。这样一来,我们的 Flask 项目能够在服务器上更加稳定、可靠地运行,为后续的开发和运维工作提供了有力保障。