能否使用信号重启Django的manage.py runserver开发服务器?
Django runserver 是否支持通过信号重启?
Django自带的manage.py runserver不支持通过SIGHUP等信号实现重启,它对SIGHUP、SIGINT、SIGTERM的默认处理逻辑就是终止进程——这是由它的定位决定的:runserver仅作为本地开发服务器,没有设计生产级服务器的热重载/信号触发重启能力。
替代方案
- 开发环境自动重载:runserver默认自带文件变更检测,当代码文件修改后会自动重启进程。如果该功能未生效,检查是否添加了
--noreload参数,或确认文件系统的变更能被Django正常识别。 - 自定义脚本实现信号重启:可以自行编写shell脚本监听HUP信号,收到信号后终止当前runserver进程并重新启动。示例脚本如下:
使用时运行该脚本,之后发送#!/bin/bash PID_FILE="/tmp/django_runserver.pid" start_server() { python manage.py runserver 0.0.0.0:8000 & echo $! > "$PID_FILE" } # 捕获HUP信号,执行重启逻辑 trap 'echo "Received HUP, restarting server..."; kill $(cat "$PID_FILE") 2>/dev/null; start_server' HUP start_server waitkill -HUP <脚本PID>即可触发重启。 - 生产环境使用专业服务器:如果是生产场景,不要使用runserver,改用Gunicorn、uWSGI这类生产级服务器,它们原生支持SIGHUP信号触发工作进程重启,实现无间断服务的热重载。
内容的提问来源于stack exchange,提问作者dotz
相关产品推荐
相关产品推荐

