系列文章目录〔一〕告别Excel困境保卫部内保系统从0到1实战——在企业内网做开发为何死磕Windows环境下Django Waitress Nginx这套技术栈〔二〕Windows部署Django避坑指南——从Python安装到HTTPS上线11步详解这是Django内保系统企业级开发系列的第三篇解决服务器重启后Djanog服务无法自动恢复的问题通过编写启动脚本和配置Windows任务计划实现NginxWaitress开机自启让服务24小时在线。 写在最前面你有没有遇到过这样的场景服务器因为打补丁、电力波动等原因意外重启你人在外地远程连不上网站挂了整整一个周末。每次重启都要远程桌面进去手动点两个启动脚本Nginx一个窗口Waitress一个窗口还要担心顺序对不对。领导问“为什么服务又连不上了”你只能说“等一下我去开一下服务”。这根本不是“生产环境”这是“人工值守环境”。真正的生产服务应该是像电波一样——你看不见它但它24小时在线永不消逝。这一篇我们就来解决这个问题让Nginx和DjangoWaitress在Windows重启后自动启动像电波一样持续守护。01 回顾前两篇文章我们做了什么在进入正题之前先简单回顾一下前两篇的成果这样你就能理解为什么第三篇要解决“开机自启”这个问题。篇章核心内容产出遗留问题第一章技术选型为什么是Django Waitress Nginx确定了整套技术栈还没开始部署第二章手把手部署从Python安装到HTTPS上线Nginx和Waitress都能手动启动网站可访问重启后服务消失需要手动重新启动简单说前两篇我们让服务“能跑”但还没让服务“自己跑”。这一篇我们就来填这个坑。02 问题的本质服务不会自己醒来目前我们的系统由两个核心进程组成组件启动方式问题Nginx反向代理静态文件HTTPS手动执行start nginx重启后进程消失WaitressWSGI服务器托管Django手动双击start_prod.bat重启后进程消失服务器一旦因为更新补丁、电力波动、硬件维护等原因重启这两个进程就像断电的收音机——彻底静默。网站自然无法访问。解决方案写一个“总开关”脚本再让Windows在开机时自动按下这个开关。这就是本章的两个核心任务编写一个统一的启动脚本一个脚本同时启动Nginx和Waitress配置Windows任务计划程序开机时自动执行这个脚本03 核心任务一写一个“总开关”脚本.bat文件3.1 生产环境启动脚本start_prod.bat在项目根目录D:\JingFuWang下新建文件start_prod.bat内容如下echo off chcp 65001 nul echo echo 保卫部内控管理系统 - 生产环境启动 echo echo. REM ----- 1. 启动Nginx后台运行----- cd /d D:\nginx start nginx.exe echo [INFO] Nginx已启动 REM ----- 2. 等待3秒让Nginx完全绑定端口 ----- timeout /t 3 /nobreak nul REM ----- 3. 切换到项目目录激活虚拟环境启动Waitress ----- cd /d D:\JingFuWang call venv\Scripts\activate echo [INFO] 正在启动Waitress服务器... waitress-serve --threads8 --listen127.0.0.1:8000 JingFuWang.wsgi:application pause3.2 关键命令解释为什么这么写命令作用如果不这么写会怎样echo off不显示命令本身只显示输出屏幕会刷一大堆命令看起来很乱chcp 65001 nul将命令行代码页改为UTF-8中文会显示成乱码cd /d D:\nginx切换到Nginx目录支持跨盘符找不到nginx.exe启动失败start nginx.exe后台启动Nginx如果不加start脚本会卡在Nginx窗口后面的Waitress不会启动timeout /t 3 /nobreak等待3秒Nginx还没启动完Waitress就抢端口可能报错cd /d D:\JingFuWang切回项目根目录后面的venv\Scripts\activate路径不对call venv\Scripts\activate激活虚拟环境不用call的话activate会“吃掉”后面的命令Waitress不会启动waitress-serve …前台运行Waitress这样窗口关了就停适合调试生产环境可以配合后台工具去掉pause 为什么要等待3秒 Nginx启动后需要一点时间初始化网络端口绑定80/443。如果立刻启动Waitress有可能因为端口冲突或Nginx未就绪而产生“502 Bad Gateway”。等待3秒是一个“软同步”的小技巧能大幅提高成功率。3.3 开发环境启动脚本 start_dev.bat可选开发环境下我们通常不需要Nginx或者单独启动直接用Django自带的runserver更方便。在项目根目录创建 start_dev.batecho off chcp 65001 nul echo echo 保卫部内控管理系统 - 开发环境启动 echo echo. cd /d D:\JingFuWang call venv\Scripts\activate echo 正在启动开发服务器... echo 监听地址: 127.0.0.1:8000 echo 自动重载: 已开启 echo. python manage.py runserver pause3.4 生产环境 vs 开发环境脚本的区别对比项生产环境 start_prod.bat开发环境 start_dev.batWeb服务器Nginx WaitressDjango自带runserver静态文件Nginx直接托管效率高Django处理慢但方便调试HTTPSNginx配置证书支持HTTPS默认HTTP代码修改需要重启Waitressrunserver自动重载性能高多线程静态缓存低单线程使用场景正式上线、对外服务本地开发、调试代码验证 双击 start_prod.bat看到Nginx和Waitress都启动成功浏览器能正常访问 https://你的IP/admin/脚本就写对了。04 配置Windows任务计划程序开机自启核心4.1 打开任务计划程序按 Win R输入 taskschd.msc回车。![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/8dce6ea493f54fd9a7540846e5962ab8.png4.2 创建任务在右侧点击 “创建任务”不要选“创建基本任务”那样选项不全。4.2.1 “常规”选项卡设置项推荐值说明名称DjangoNginxAutoStart可自定义建议英文无空格描述开机自动启动Nginx和Django应用便于日后识别安全选项不管用户是否登录都要运行重启后即使没人登录也会启动勾选使用最高权限运行Nginx监听80/443端口需要管理员权限⚠️ 点击“不管用户是否登录都要运行”后会要求输入当前Windows管理员密码正确输入即可。4.2.2 “触发器”选项卡点击“新建”设置项推荐值说明开始任务启动时系统一启动就触发延迟任务时间1分钟系统启动初期网络、磁盘可能未就绪延迟可提高成功率状态已启用必须勾选⚠️ 为什么需要延迟系统刚启动时网络服务、磁盘驱动可能还没完全初始化。如果脚本立即运行可能因为Nginx无法绑定端口、虚拟环境路径未就绪等原因失败。延迟1-2分钟可以显著提高自启成功率。4.2.3 “操作”选项卡点击“新建”设置项推荐值说明操作启动程序固定选择程序或脚本D:\JingFuWang\start_prod.bat浏览选择你的启动脚本起始于可选D:\JingFuWang 非常重要确保脚本中的相对路径能正确找到 最容易踩的坑如果忘记填写“起始于”脚本中的相对路径比如 venv\Scripts\activate 或 cd /d D:\nginx 中的相对写法可能因为当前工作目录不是项目根目录而失败。强烈建议填写“起始于”并且使用绝对路径。4.2.4“条件”选项卡取消勾选以下两项尤其是笔记本用户· “只有在计算机使用交流电源时才启动此任务”否则笔记本用电池时不会自启· 其他选项保持默认4.2.5“设置”选项卡设置项推荐值说明允许按需运行任务勾选方便手动测试如果任务失败按以下频率重新启动勾选间隔5分钟最多3次容错机制防止临时失败其他选项保持默认—点击“确定”保存任务。05 验证重启一次看看“电波”还在不在5.1 手动测试不重启在任务计划程序库中找到刚刚创建的任务右键 → 运行。观察是否正常启动Nginx和Waitress。打开浏览器访问 https://19.74.8.18/admin/确认能登录。5.2 重启服务器测试重启服务器或虚拟机等待约2分钟触发器延迟1分钟 系统启动时间再次访问 https://你的IP/admin/如果能正常打开恭喜你——你的Django服务已经成为“永不消逝的电波”了5.3 查看任务运行历史在任务计划程序库中选中任务右侧“所选项目” → “历史记录”或“运行结果”可以查看是否执行成功。如果状态为“0x0”表示成功其他代码表示失败。06 常见问题排查最容易踩的坑汇总现象可能原因解决方法任务计划显示“0x1”或“操作失败”脚本路径错误或权限不足检查“操作”中的“起始于”是否正确确认脚本中所有路径都是绝对路径检查是否勾选了“使用最高权限运行”Nginx启动成功但Waitress未启动虚拟环境未激活或Python路径错误在脚本中先执行 cd /d D:\JingFuWang再 call venv\Scripts\activate检查 waitress-serve 命令是否可用手动执行一次验证开机后访问网站502Waitress启动较慢Nginx已经转发增加触发器中的“延迟任务时间”比如改为2分钟或在脚本中增加等待时间timeout /t 10任务计划中任务显示“正在运行”但服务没起来脚本卡在某个命令如pause生产环境脚本中不要写pause或者将脚本改为后台执行方式自启动后Cookie/Session丢失启动时用户环境不同自启脚本与手动启动的逻辑完全一致一般不会。如果遇到检查Nginx配置中是否包含 proxy_set_header Cookie $http_cookie;任务计划中触发器显示“已错过”系统启动时任务计划服务未就绪增加延迟时间或者勾选“如果过了计划开始时间立即启动任务”07 安全扩展预告后续会单独成文本章聚焦于让服务自动跑起来没有深入安全配置。但在生产环境中以下内容同样重要· Windows服务器基础安全加固关闭高危端口135、139、445、禁用默认共享、防火墙策略· Nginx安全配置隐藏版本号、限制请求方法、防SQL注入/XSS、IP白名单· Django生产环境安全清单DEBUGFalse、ALLOWED_HOSTS、安全Cookie设置、HTTPS强制跳转这些内容后续会单独整理成安全部署专题发布欢迎关注更新。08 小结与代码切入这一篇我们只做了两件事但解决了生产环境最致命的问题任务做了什么解决了什么编写 start_prod.bat一个脚本同时启动Nginx和Waitress不用每次开两个窗口顺序不会乱不会漏掉服务配置Windows任务计划开机自动执行这个脚本重启后服务自动恢复无需人工介入应对补丁更新、电力波动、硬件重启现在我们的Django项目已经是一台“永不消逝的电波发射台”了——服务器重启它自己醒来你睡觉它还在线。知识点具体内容关键理解启动脚本start_prod.bat / start_dev.bat cd /d跨盘符、call 激活虚拟环境、start 后台启动生产vs开发脚本对比表生产用WaitressNginx开发用runserver任务计划程序常规/触发器/操作/条件/设置延迟时间、起始于、失败重启是关键验证方法手动运行、重启测试、查看历史确认服务自动恢复下一章我们将真正进入Django代码模块好的代码是会“呼吸”的——用4个核心原则构建优雅如诗的企业级系统架构让我们一同构建整个系统的权限基石。 欢迎关注有任何问题可以在评论区交流我会持续更新实战经验。连载目录已发布〔一〕告别Excel困境保卫部内保系统从0到1实战——在企业内网做开发为何死磕Windows环境下Django Waitress Nginx这套技术栈〔二〕万字长文Windows部署Django避坑指南——从Python安装到HTTPS上线11步详解
〔三〕永不消逝的电波——开机启动脚本+Windows任务计划,让Django服务24小时在线
发布时间:2026/5/26 9:19:15
系列文章目录〔一〕告别Excel困境保卫部内保系统从0到1实战——在企业内网做开发为何死磕Windows环境下Django Waitress Nginx这套技术栈〔二〕Windows部署Django避坑指南——从Python安装到HTTPS上线11步详解这是Django内保系统企业级开发系列的第三篇解决服务器重启后Djanog服务无法自动恢复的问题通过编写启动脚本和配置Windows任务计划实现NginxWaitress开机自启让服务24小时在线。 写在最前面你有没有遇到过这样的场景服务器因为打补丁、电力波动等原因意外重启你人在外地远程连不上网站挂了整整一个周末。每次重启都要远程桌面进去手动点两个启动脚本Nginx一个窗口Waitress一个窗口还要担心顺序对不对。领导问“为什么服务又连不上了”你只能说“等一下我去开一下服务”。这根本不是“生产环境”这是“人工值守环境”。真正的生产服务应该是像电波一样——你看不见它但它24小时在线永不消逝。这一篇我们就来解决这个问题让Nginx和DjangoWaitress在Windows重启后自动启动像电波一样持续守护。01 回顾前两篇文章我们做了什么在进入正题之前先简单回顾一下前两篇的成果这样你就能理解为什么第三篇要解决“开机自启”这个问题。篇章核心内容产出遗留问题第一章技术选型为什么是Django Waitress Nginx确定了整套技术栈还没开始部署第二章手把手部署从Python安装到HTTPS上线Nginx和Waitress都能手动启动网站可访问重启后服务消失需要手动重新启动简单说前两篇我们让服务“能跑”但还没让服务“自己跑”。这一篇我们就来填这个坑。02 问题的本质服务不会自己醒来目前我们的系统由两个核心进程组成组件启动方式问题Nginx反向代理静态文件HTTPS手动执行start nginx重启后进程消失WaitressWSGI服务器托管Django手动双击start_prod.bat重启后进程消失服务器一旦因为更新补丁、电力波动、硬件维护等原因重启这两个进程就像断电的收音机——彻底静默。网站自然无法访问。解决方案写一个“总开关”脚本再让Windows在开机时自动按下这个开关。这就是本章的两个核心任务编写一个统一的启动脚本一个脚本同时启动Nginx和Waitress配置Windows任务计划程序开机时自动执行这个脚本03 核心任务一写一个“总开关”脚本.bat文件3.1 生产环境启动脚本start_prod.bat在项目根目录D:\JingFuWang下新建文件start_prod.bat内容如下echo off chcp 65001 nul echo echo 保卫部内控管理系统 - 生产环境启动 echo echo. REM ----- 1. 启动Nginx后台运行----- cd /d D:\nginx start nginx.exe echo [INFO] Nginx已启动 REM ----- 2. 等待3秒让Nginx完全绑定端口 ----- timeout /t 3 /nobreak nul REM ----- 3. 切换到项目目录激活虚拟环境启动Waitress ----- cd /d D:\JingFuWang call venv\Scripts\activate echo [INFO] 正在启动Waitress服务器... waitress-serve --threads8 --listen127.0.0.1:8000 JingFuWang.wsgi:application pause3.2 关键命令解释为什么这么写命令作用如果不这么写会怎样echo off不显示命令本身只显示输出屏幕会刷一大堆命令看起来很乱chcp 65001 nul将命令行代码页改为UTF-8中文会显示成乱码cd /d D:\nginx切换到Nginx目录支持跨盘符找不到nginx.exe启动失败start nginx.exe后台启动Nginx如果不加start脚本会卡在Nginx窗口后面的Waitress不会启动timeout /t 3 /nobreak等待3秒Nginx还没启动完Waitress就抢端口可能报错cd /d D:\JingFuWang切回项目根目录后面的venv\Scripts\activate路径不对call venv\Scripts\activate激活虚拟环境不用call的话activate会“吃掉”后面的命令Waitress不会启动waitress-serve …前台运行Waitress这样窗口关了就停适合调试生产环境可以配合后台工具去掉pause 为什么要等待3秒 Nginx启动后需要一点时间初始化网络端口绑定80/443。如果立刻启动Waitress有可能因为端口冲突或Nginx未就绪而产生“502 Bad Gateway”。等待3秒是一个“软同步”的小技巧能大幅提高成功率。3.3 开发环境启动脚本 start_dev.bat可选开发环境下我们通常不需要Nginx或者单独启动直接用Django自带的runserver更方便。在项目根目录创建 start_dev.batecho off chcp 65001 nul echo echo 保卫部内控管理系统 - 开发环境启动 echo echo. cd /d D:\JingFuWang call venv\Scripts\activate echo 正在启动开发服务器... echo 监听地址: 127.0.0.1:8000 echo 自动重载: 已开启 echo. python manage.py runserver pause3.4 生产环境 vs 开发环境脚本的区别对比项生产环境 start_prod.bat开发环境 start_dev.batWeb服务器Nginx WaitressDjango自带runserver静态文件Nginx直接托管效率高Django处理慢但方便调试HTTPSNginx配置证书支持HTTPS默认HTTP代码修改需要重启Waitressrunserver自动重载性能高多线程静态缓存低单线程使用场景正式上线、对外服务本地开发、调试代码验证 双击 start_prod.bat看到Nginx和Waitress都启动成功浏览器能正常访问 https://你的IP/admin/脚本就写对了。04 配置Windows任务计划程序开机自启核心4.1 打开任务计划程序按 Win R输入 taskschd.msc回车。![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/8dce6ea493f54fd9a7540846e5962ab8.png4.2 创建任务在右侧点击 “创建任务”不要选“创建基本任务”那样选项不全。4.2.1 “常规”选项卡设置项推荐值说明名称DjangoNginxAutoStart可自定义建议英文无空格描述开机自动启动Nginx和Django应用便于日后识别安全选项不管用户是否登录都要运行重启后即使没人登录也会启动勾选使用最高权限运行Nginx监听80/443端口需要管理员权限⚠️ 点击“不管用户是否登录都要运行”后会要求输入当前Windows管理员密码正确输入即可。4.2.2 “触发器”选项卡点击“新建”设置项推荐值说明开始任务启动时系统一启动就触发延迟任务时间1分钟系统启动初期网络、磁盘可能未就绪延迟可提高成功率状态已启用必须勾选⚠️ 为什么需要延迟系统刚启动时网络服务、磁盘驱动可能还没完全初始化。如果脚本立即运行可能因为Nginx无法绑定端口、虚拟环境路径未就绪等原因失败。延迟1-2分钟可以显著提高自启成功率。4.2.3 “操作”选项卡点击“新建”设置项推荐值说明操作启动程序固定选择程序或脚本D:\JingFuWang\start_prod.bat浏览选择你的启动脚本起始于可选D:\JingFuWang 非常重要确保脚本中的相对路径能正确找到 最容易踩的坑如果忘记填写“起始于”脚本中的相对路径比如 venv\Scripts\activate 或 cd /d D:\nginx 中的相对写法可能因为当前工作目录不是项目根目录而失败。强烈建议填写“起始于”并且使用绝对路径。4.2.4“条件”选项卡取消勾选以下两项尤其是笔记本用户· “只有在计算机使用交流电源时才启动此任务”否则笔记本用电池时不会自启· 其他选项保持默认4.2.5“设置”选项卡设置项推荐值说明允许按需运行任务勾选方便手动测试如果任务失败按以下频率重新启动勾选间隔5分钟最多3次容错机制防止临时失败其他选项保持默认—点击“确定”保存任务。05 验证重启一次看看“电波”还在不在5.1 手动测试不重启在任务计划程序库中找到刚刚创建的任务右键 → 运行。观察是否正常启动Nginx和Waitress。打开浏览器访问 https://19.74.8.18/admin/确认能登录。5.2 重启服务器测试重启服务器或虚拟机等待约2分钟触发器延迟1分钟 系统启动时间再次访问 https://你的IP/admin/如果能正常打开恭喜你——你的Django服务已经成为“永不消逝的电波”了5.3 查看任务运行历史在任务计划程序库中选中任务右侧“所选项目” → “历史记录”或“运行结果”可以查看是否执行成功。如果状态为“0x0”表示成功其他代码表示失败。06 常见问题排查最容易踩的坑汇总现象可能原因解决方法任务计划显示“0x1”或“操作失败”脚本路径错误或权限不足检查“操作”中的“起始于”是否正确确认脚本中所有路径都是绝对路径检查是否勾选了“使用最高权限运行”Nginx启动成功但Waitress未启动虚拟环境未激活或Python路径错误在脚本中先执行 cd /d D:\JingFuWang再 call venv\Scripts\activate检查 waitress-serve 命令是否可用手动执行一次验证开机后访问网站502Waitress启动较慢Nginx已经转发增加触发器中的“延迟任务时间”比如改为2分钟或在脚本中增加等待时间timeout /t 10任务计划中任务显示“正在运行”但服务没起来脚本卡在某个命令如pause生产环境脚本中不要写pause或者将脚本改为后台执行方式自启动后Cookie/Session丢失启动时用户环境不同自启脚本与手动启动的逻辑完全一致一般不会。如果遇到检查Nginx配置中是否包含 proxy_set_header Cookie $http_cookie;任务计划中触发器显示“已错过”系统启动时任务计划服务未就绪增加延迟时间或者勾选“如果过了计划开始时间立即启动任务”07 安全扩展预告后续会单独成文本章聚焦于让服务自动跑起来没有深入安全配置。但在生产环境中以下内容同样重要· Windows服务器基础安全加固关闭高危端口135、139、445、禁用默认共享、防火墙策略· Nginx安全配置隐藏版本号、限制请求方法、防SQL注入/XSS、IP白名单· Django生产环境安全清单DEBUGFalse、ALLOWED_HOSTS、安全Cookie设置、HTTPS强制跳转这些内容后续会单独整理成安全部署专题发布欢迎关注更新。08 小结与代码切入这一篇我们只做了两件事但解决了生产环境最致命的问题任务做了什么解决了什么编写 start_prod.bat一个脚本同时启动Nginx和Waitress不用每次开两个窗口顺序不会乱不会漏掉服务配置Windows任务计划开机自动执行这个脚本重启后服务自动恢复无需人工介入应对补丁更新、电力波动、硬件重启现在我们的Django项目已经是一台“永不消逝的电波发射台”了——服务器重启它自己醒来你睡觉它还在线。知识点具体内容关键理解启动脚本start_prod.bat / start_dev.bat cd /d跨盘符、call 激活虚拟环境、start 后台启动生产vs开发脚本对比表生产用WaitressNginx开发用runserver任务计划程序常规/触发器/操作/条件/设置延迟时间、起始于、失败重启是关键验证方法手动运行、重启测试、查看历史确认服务自动恢复下一章我们将真正进入Django代码模块好的代码是会“呼吸”的——用4个核心原则构建优雅如诗的企业级系统架构让我们一同构建整个系统的权限基石。 欢迎关注有任何问题可以在评论区交流我会持续更新实战经验。连载目录已发布〔一〕告别Excel困境保卫部内保系统从0到1实战——在企业内网做开发为何死磕Windows环境下Django Waitress Nginx这套技术栈〔二〕万字长文Windows部署Django避坑指南——从Python安装到HTTPS上线11步详解