AppleScript可实现交互式定时关机与取消:输入分钟数后自动执行sudo shutdown -h +X,支持双按钮选择设置或取消,需预先配置sudoers免密权限以确保静默运行。

你想让Mac在15分钟后自动关机,又担心临时有事需要取消——AppleScript能帮你完成这个交互式定时关机任务,还能随时中止已设定的计划,无需打开终端记命令。
用AppleScript实现带确认的定时关机
第一步:打开“脚本编辑器”App(可在聚焦搜索中输入“脚本编辑器”快速启动)。
第二步:粘贴以下代码:
display dialog "设置多少分钟后关机?" default answer "15"
set mins to text returned of result
try
set cmd to "sudo shutdown -h +" & mins
do shell script cmd with administrator privileges
display notification "已安排 " & mins & " 分钟后关机" with title "定时关机已启用"
on error
display alert "执行失败,请检查输入是否为数字,或是否已配置sudoers免密权限"
end try
第三步:点击左上角“播放”按钮运行脚本,输入分钟数(如15),确认后系统会立即注册关机任务。
这一步必须使用 with administrator privileges,否则脚本无法获得执行 shutdown 所需的 root 权限,会直接报错退出。
用同一脚本取消已设定的定时关机
方法一:复用原脚本,但修改为取消逻辑
将原脚本中 try 块内的两行替换为:
do shell script "sudo shutdown -c" with administrator privileges
display notification "已取消所有待执行关机任务" with title "定时关机已取消"
查询苹果健康当日数据,分析身体状况是否适合锻炼,给出四档建议(重度/中度/轻度/建议休息)并附详细说明。使用 Python 处理数据。
方法二:更安全的双按钮交互式脚本(推荐)
在“脚本编辑器”中新建脚本,粘贴以下内容:
set choice to button returned of (display dialog "选择操作:" buttons {"取消关机", "设置关机"} default button "设置关机")
if choice is "设置关机" then
display dialog "设置多少分钟后关机?" default answer "10"
set mins to text returned of result
try
do shell script "sudo shutdown -h +" & mins with administrator privileges
display notification "已安排 " & mins & " 分钟后关机" with title "✅ 定时关机已启用"
on error
display alert "失败:请确认输入为纯数字,且当前用户已在 sudoers 中授权 /sbin/shutdown"
end try
else
try
do shell script "sudo shutdown -c" with administrator privileges
display notification "所有待执行关机任务已清除" with title "⏹️ 已取消"
on error
display alert "取消失败:可能无待执行任务,或权限不足"
end try
end if
运行后弹出两个按钮,点“取消关机”即可一键终止所有 pending 的 shutdown 任务,比反复开终端输命令快得多。
确保脚本能长期可靠运行的关键配置
① 先在终端中执行一次免密授权(只需做一次):
sudo visudo → 在文件末尾添加这一行(把 yourusername 替换为你自己的用户名):
yourusername ALL=(ALL) NOPASSWD: /sbin/shutdown
② 保存后退出(Esc → :wq → 回车)。此后 AppleScript 调用 do shell script "sudo shutdown..." 就不会再卡在密码输入界面。
③ 若跳过第①步,每次运行脚本都会弹出系统密码框;若输错三次,脚本直接中断,且不会执行后续通知。
④ 验证是否生效:在脚本中临时插入一行 do shell script "sudo shutdown -c",运行看是否静默成功——不弹窗、无报错即表示配置完成。

















