Python- 关闭XShell后仍然保持Django项目运行

nohup 命令简介

nohup 是一个 Unix 和 Linux 系统上的命令,它的名称来自 “no hang up” 的简写。在了解 nohup 的作用之前,我们需要先理解 “挂断信号”(hangup signal,简称 HUP)的概念。

在 Unix-like 系统中,当我们通过 SSH、终端或其他方式登录到一个系统并启动一个程序时,这个程序与我们的登录会话是关联的。如果会话被终止(例如,关闭终端、断开SSH连接等),系统会向所有与该会话关联的进程发送一个称为 “挂断信号”(SIGHUP)的信号。默认情况下,当进程接收到这个信号时,它们会终止运行,因为它们失去了与用户会话的联系。

nohup 命令的作用是让某个命令忽略挂断信号。当我们在命令前加上 nohup 运行时,即使断开连接或关闭终端,这个命令会继续在后台运行。nohup 实现这一点的方式是修改了这个命令的信号处理行为,让它不对 SIGHUP 信号做出默认的响应(即终止运行)。

这就意味着,使用 nohup 运行的程序可以在用户退出登录、关闭终端窗口后继续运行,直到它们完成任务、被其他方式明确终止,或者系统本身关闭。

一个典型的 nohup 使用场景是在远程服务器上启动长时间运行的脚本或服务。比如,我们要启动一个数据分析脚本,需要运行几个小时或几天。使用 nohup,可以启动脚本后安全地关闭终端或断开SSH连接,而不用担心这会影响脚本的运行。

使用场景

例如,使用了 nohup 来在后台运行 Django 服务器,并且将标准输出和标准错误重定向到 nohup.out 文件中,之后通过 & 将其置于后台执行,最后执行 exit 命令退出当前的 SSH 会话或者终端。命令的结构如下:

nohup python manage.py runserver 0.0.0.0:8000 > nohup.out &
exit

这条命令会做以下几件事:

  1. nohup: 让命令忽略挂断信号(hangup signal),即使当前的 SSH 会话或终端被关闭,命令依然运行。
  2. python manage.py runserver 0.0.0.0:8000: 使用 Django 的 manage.py 脚本来启动开发服务器,监听所有可用的 IP 地址 (0.0.0.0) 上的 8000 端口。这允许外部访问我们的 Django 应用。
  3. > nohup.out: 将命令的标准输出(STDOUT)重定向到 nohup.out 文件中。如果命令有任何输出,它将被写入到这个文件里,而不是显示在终端上。
  4. &: 将命令置于后台执行。
  5. exit: 退出当前的 SSH 会话或者终端。

但是,有一点需要注意:在生产环境中直接使用 Django 的开发服务器 (runserver) 并不是一个好的做法,因为它不是为生产环境设计的,可能存在性能和安全问题。在生产环境中,建议使用专门的 WSGI 服务器(如 Gunicorn、uWSGI 等)来运行 Django 应用,并且通常还会结合使用 Nginx 或 Apache 作为反向代理来提高性能和安全性。


笔者常用这个命令:

nohup python3 manage.py runserver 0.0.0.0:8000 > run.log 2>&1 &
  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青衫客36

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值