linux下须用systemd用户服务实现开机自启闹钟:创建~/.config/systemd/user/alarm-clock.service,配置type=oneshot、execstart含sleep延迟与脚本路径、设display和xauthority环境变量,启用前需loginctl enable-linger $user;windows下须用任务计划程序以system权限注册onstart任务,并确保powershell脚本用[console]::beep或soundplayer播放声音。

让电脑开机后自动运行定时闹钟脚本,需确保脚本具备可执行权限、能后台静音运行、且不依赖用户图形会话启动。Windows 和 Linux 系统实现路径完全不同,不能混用同一套配置逻辑。
Linux 系统下通过 systemd 用户服务启用开机自启
这一步必须在目标用户登录前就启动闹钟服务,systemd --user 是唯一可靠方式,普通 crontab @reboot 在无登录会话时无法弹出通知或播放音频。
第一步:创建服务文件。在终端中执行:mkdir -p ~/.config/systemd/user && nano ~/.config/systemd/user/alarm-clock.service
第二步:粘贴以下内容(注意替换 【/home/yourname/scripts/alarm.sh】 为你的实际脚本绝对路径):
[Unit]
Description=Daily Alarm Clock
WantedBy=default.target
[Service]
Type=oneshot
ExecStart=/bin/bash -c 'sleep 10 && /home/yourname/scripts/alarm.sh'
RemainAfterExit=yes
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/yourname/.Xauthority
[Install]
WantedBy=default.target
第三步:启用服务并立即测试:systemctl --user daemon-reload && systemctl --user enable alarm-clock.service && systemctl --user start alarm-clock.service。若提示“Failed to connect to bus”,说明未启用 user session,需先执行 loginctl enable-linger $USER。
Windows 系统下通过任务计划程序设置开机触发
方法一:使用图形界面向导(适合新手)
打开“任务计划程序”→右键“任务计划程序库”→“创建基本任务”→命名为“DailyAlarm”→触发器选“计算机启动时”→操作选“启动程序”→程序路径填 【C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe】→参数栏填 -WindowStyle Hidden -ExecutionPolicy Bypass -File "D:\scripts\alarm.ps1"。
方法二:命令行一键注册(需管理员权限)
以管理员身份运行 PowerShell,执行:schtasks /create /tn "DailyAlarm" /tr "powershell.exe -WindowStyle Hidden -ExecutionPolicy Bypass -File \"D:\scripts\alarm.ps1\"" /sc onstart /ru SYSTEM /f。这里用 【/ru SYSTEM】 是关键,否则用户未登录时音频设备不可用,闹钟静音。
闹钟脚本自身必须满足的硬性条件
Linux 脚本开头必须包含 shebang 并声明环境变量:#!/bin/bash,且第一行加 export DISPLAY=:0;否则即使服务启动,notify-send 或 paplay 也会失败。
Windows PowerShell 脚本中播放声音必须用 [console]::beep(800,2000) 或调用 New-Object Media.SoundPlayer 加载本地 .wav 文件,不能依赖浏览器 Audio API——开机阶段无可用浏览器进程。
所有脚本末尾必须加 exit 0,否则 systemd 或任务计划程序可能误判为失败而反复重试。











