应使用pmset配合crontab或launchd实现Mac每日定时关机:因shutdown需root权限且cron受限,pmset是用户级可用的原生命令;crontab方案用date动态生成当日日期,launchd方案需手动更新plist中的固定日期。

你想让Mac在每天固定时间自动关机,又不想依赖图形界面的「节能」设置,就得用终端命令配合crontab实现——但直接写shutdown -h会失败,因为macOS从Catalina开始限制cron的磁盘访问权限,且shutdown命令在用户级crontab中根本不可用。
为什么不能直接用 shutdown 命令
macOS系统里,shutdown是root权限命令,普通用户crontab无权调用;即使加sudo,crontab也无法读取密码或获得授权。强行写sudo shutdown -h now会导致任务静默失败,日志里只留一行“permission denied”。
这一步必须绕开——改用pmset,它是macOS原生命令,无需sudo,用户可直接调用,且支持绝对时间设定。
用 pmset + crontab 实现每日定时关机
方法一:crontab 每天触发一次 pmset 设定当天关机时间
第一步:打开终端,运行 crontab -e 进入编辑模式
第二步:按i进入插入状态,输入以下行(以每天23:00关机为例):
0 23 * * * /usr/bin/pmset schedule shutdown "$(date +\%m/\%d/\%y) 23:00:00"
注意:这里用$(date +\%m/\%d/\%y)动态生成当天日期,避免手动写死年份出错;引号和反斜杠缺一不可,否则shell解析失败。
第三步:按Esc→输入:wq→回车保存退出
第四步:验证是否写入成功,执行 crontab -l,确认看到刚添加的那行
替代方案:用 launchd(更可靠,推荐)
如果你发现crontab偶尔漏执行——比如Mac休眠后唤醒没补发任务——就该换launchd。它原生支持延迟补偿,且不依赖cron守护进程是否存活。
方法一:直接创建一个每晚23:00触发的plist文件
在终端中执行:mkdir -p ~/Library/LaunchAgentstouch ~/Library/LaunchAgents/com.user.night.shutdown.plist
用文本编辑器打开该plist文件,填入以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.night.shutdown</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/pmset</string>
<string>schedule</string>
<string>shutdown</string>
<string>$(date +\%m/\%d/\%y) 23:00:00</string>
</array>
<key>StartCalendarInterval</key>
<dict>
<key>Hour</key>
<integer>23</integer>
<key>Minute</key>
<integer>0</integer>
</dict>
</dict>
</plist>
方法二:加载并启用该任务launchctl load ~/Library/LaunchAgents/com.user.night.shutdown.plistlaunchctl start com.user.night.shutdown
【关键提醒】plist里的$(date +\%m/\%d/\%y)在文件保存时不会被立即执行——launchd读取的是静态字符串,所以这行实际无效。必须删掉动态部分,改写成固定格式:<string>09/16/26 23:00:00</string>(根据当前日期2026年9月16日填写)
每次日期变更都要手动更新plist里的日期字段,否则关机不会触发。


















