【问题标题】:How do I quit a Django development server with a bash script?如何使用 bash 脚本退出 Django 开发服务器?
【发布时间】:2014-05-11 14:54:20
【问题描述】:

我编写了一个 bash 脚本来启动一个 Django 开发服务器,但是,我也希望能够在服务器使用 bash 脚本运行时退出该服务器。我正在为 Koding.com 编写一个 Web 应用程序,它通过按下按钮运行 bash 脚本,在链接到用户个人 VM 的在线终端中启动 Django 进程,我希望用户能够用按下一个按钮也是如此。我知道控制 C 将结束该过程,但我无法找到如何在 bash 脚本中执行此操作。我怎么能这样做呢?谢谢!

更新:我最终结合了我为这个问题选择的答案和我问的另一个问题的答案(如何在 django shell 中运行 unix 命令)来解决我的问题:https://stackoverflow.com/a/22777849/2181017

【问题讨论】:

  • 老派:你可以使用它的 PID 杀死进程。启动时将PID写入server.pid文件,然后kill它。

标签: python linux django bash shell


【解决方案1】:

你可以杀死监听 8000/TCP 的进程:

fuser -k 8000/tcp

fuser 命令显示哪些进程正在使用指定的文件、套接字或文件系统,-k 选项也会杀死它们。

等等,澄清一下,没有办法暂时退出那个 django shell 东西以便我可以运行 unix 命令?

当您启动开发服务器时,它将在前台运行,阻止提示。您可以通过点击CTRL+Z 暂停在前台运行的任务,然后将任务发送到后台运行bg 命令(我假设您正在运行 bash shell 或类似的)。 jobs 命令将列出暂停的任务或在后台运行的任务。您可以使用fg 命令将任务置于前台。

请参阅 bash 手册页 (man bash)。

【讨论】:

  • 谢谢!您是否也知道我可以在图片中光标所在的位置运行该命令?我似乎无法从那里运行和 unix 命令。 (我不知道 Django 是如何工作的)
  • 如果你使用终端,我想你可以直接按 CTRL+C 来终止进程。 fuser 命令可以从另一个终端运行,也可以从其他进程调用,只要终端或进程在同一台服务器上运行。
  • 我知道,但是,我希望用户能够按下“停止 Django”按钮来终止进程,因为这个安装程序非常易于人们使用。因此,当用户按下按钮时,我将运行一个理想情况下结束进程的 shell 脚本。您提供的内容确实终止了该过程,但我想知道您是否知道如何在不打开另一个终端的情况下运行该命令,因为我在图片中光标所在的位置键入的任何内容似乎都没有做任何事情。
  • 没问题,你可以从其他进程运行fuser命令,只要它运行在同一台服务器上并且用户有足够的权限杀死进程(通常是同一个用户运行django或root )。您使用什么编程语言来提供该 UI?
  • 哈哈,嗯,我现在的问题更多是关于如何在上图中的光标所在的位置运行 unix 命令。键入“fuser -k 8000/tcp”然后按 enter 似乎没有做任何事情,因为它在一些 django shell 或其他东西中。你会碰巧知道我如何在那里运行 unix 命令吗?再次感谢。
【解决方案2】:

您可以简单地使用CTRL+C 退出您的服务器。
其他 ubuntu 系统你可以像下面那样做。

prashant@prashant-OptiPlex-3010:~$  ps -eaf|grep runserver
prashant  3445  2805  4 11:20 pts/0    00:00:00 python manage.py runserver
prashant  3446  3445  5 11:20 pts/0    00:00:00 /usr/bin/python manage.py runserver
prashant  3449  3375  0 11:20 pts/1    00:00:00 grep --color=auto runserver
prashant@prashant-OptiPlex-3010:~$ kill 3446
prashant@prashant-OptiPlex-3010:~$ 

【讨论】:

    【解决方案3】:

    GNU 屏幕呢? http://www.gnu.org/software/screen/

    screen
    ./manage.py runserver 0.0.0.0:8000
    ctrl + a then d (this will detach from screen)
    exit (from the shell)
    

    当你需要停止时,在 shell 中重新登录

    screen -r
    ctrl + c
    exit (from screen)
    exit (from the shell)
    

    将其放入~/.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}]'
    

    【讨论】:

      猜你喜欢
      • 2012-12-13
      • 2023-01-28
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      • 2015-12-21
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多