最稳定方案是用windows任务计划程序创建带失败重试和唤醒功能的系统级任务,其次可选powershell看门狗脚本或nssm封装为windows服务。

电脑自动闹钟脚本运行到一半突然退出,导致清晨关键唤醒失效,你急需一个不依赖图形界面、能自我恢复的后台守护机制——这不是加个循环就能解决的简单问题,脚本崩溃后进程消失,必须由系统级服务接管重启逻辑。
用Windows任务计划程序创建带失败重试的唤醒任务
这是最稳定、无需额外安装、且与系统电源策略深度集成的方案。任务计划程序原生支持“失败后重新运行”和“唤醒计算机”双重能力,比Python watchdog或bat循环更可靠。
第一步:按 Win + R 输入 taskschd.msc 回车,打开任务计划程序。
第二步:右侧点击“创建基本任务”,命名为“晨间闹钟守护”,描述填“监控并重启闹钟脚本”,点“下一步”。
第三步:触发器选“当特定事件被记录时”,日志选“应用程序”,来源选你的脚本名(如 Python、wscript 或自定义exe名称),事件ID留空→点“下一步”。【这一步必须填对来源名,否则无法捕获脚本异常退出事件】
第四步:操作选“启动程序”,在“程序或脚本”栏填入你的闹钟脚本完整路径,例如:
C:\Alarm\wake_up.py
若为批处理,则填:
C:\Alarm\start_alarm.bat
第五步:勾选“配置”页签 → 左侧选“Windows 10”或“Windows 11” → 在右侧面板找到“如果任务失败,每隔”选项,设为“1分钟”,重试次数填“3” → 拉到底部勾选“如果任务正在运行,请勿启动新实例” → 点击“确定”保存。
用PowerShell脚本实现进程级看门狗
适用于需要实时响应、且脚本本身无日志输出或事件记录的场景。该脚本每30秒检查一次目标进程是否存在,发现消失立即拉起,全程静默运行。
方法一:新建一个 watchdog.ps1 文件,内容如下:
$processName = "pythonw"; $scriptPath = "C:\Alarm\wake_up.py"; while($true) { if (-not (Get-Process -Name $processName -ErrorAction SilentlyContinue)) { Start-Process pythonw -ArgumentList $scriptPath -WindowStyle Hidden }; Start-Sleep -Seconds 30 }
方法二:以管理员身份运行 PowerShell,执行以下命令启用脚本执行策略(仅需一次):
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
方法三:将该脚本设为开机自启——在任务计划程序中新建任务,触发器选“登录时”,操作选“启动程序”,程序填 powershell.exe,参数填:
-WindowStyle Hidden -ExecutionPolicy Bypass -File "C:\Alarm\watchdog.ps1"
注意:若你的闹钟脚本是 .pyw 或通过 pyinstaller 打包成 exe,请把 $processName 改为对应进程名(如 pythonw、alarm_app、pyinstxtractor 等),否则看门狗找不到进程就无法重启。
用Windows服务包装脚本实现系统级守护
这是最高权限、最低延迟、且不受用户登录状态影响的方案。服务在系统启动时即加载,即使无人登录、锁屏或远程桌面断开,闹钟脚本也能持续存活。
第一步:下载 nssm.exe(Non-Sucking Service Manager),官网地址 nssm.cc,解压后把 nssm.exe 放到 C:\Windows\System32 目录下。
第二步:以管理员身份打开命令提示符,执行:
nssm install AlarmService
第三步:在弹出窗口中,“Path”栏填你的 Python 解释器路径(如 C:\Python39\pythonw.exe),“Startup directory”填脚本所在文件夹(如 C:\Alarm),“Arguments”栏填:
wake_up.py
第四步:切换到“Details”页签,在“Service name”输入 AlarmService,“Display name”填“晨间闹钟守护服务”,“Description”写“自动重启异常退出的闹钟脚本”;再切到“Exit Actions”页签,勾选“Restart service on exit code”并填入常见崩溃码:
0,1,255
第五步:点击“Install service”,完成后在服务管理器(services.msc)中找到“晨间闹钟守护服务”,右键→“启动”,并右键→“属性”→将“启动类型”设为“自动(延迟启动)”。











