在 macOS 系统下,当屏幕息屏或合上盖子时,后台脚本程序是否会继续运行,主要取决于以下几个因素:
caffeinate
命令(系统自带)# 运行脚本时阻止睡眠(直到脚本结束)
caffeinate -s ./your_script.sh
# 或者永久阻止睡眠(需手动终止)
caffeinate -dims &
./your_script.sh
参数说明:
-d
:阻止显示器睡眠-i
:阻止系统空闲睡眠-m
:阻止磁盘睡眠-s
:阻止系统睡眠(合盖仍有效)# 临时禁用睡眠(需 sudo 密码)
sudo systemsetup -setcomputersleep Never
# 恢复默认设置
sudo systemsetup -setcomputersleep 30
tmux
或 nohup
# 使用 tmux(推荐)
tmux new -s mysession
./your_script.sh
# 按 Ctrl+B → D 脱离会话(脚本继续运行)
# 使用 nohup
nohup ./your_script.sh &
# 查看所有进程
ps aux | grep your_script
# 查看系统睡眠状态
pmset -g assertions
如果输出中包含 PreventUserIdleSystemSleep
,说明防睡眠已生效。
问题:合盖后 SSH 断开导致脚本终止
方案:通过 tmux
/screen
运行脚本,或使用内网穿透工具(如 frp)。
问题:依赖 GUI 的脚本失败
方案:改用无头模式(如 headless
浏览器)或 CLI 工具。
如果需要长期运行后台任务,建议:
launchd
配置守护进程:
<dict>
<key>Labelkey>
<string>your.scriptstring>
<key>ProgramArgumentskey>
<array>
<string>/path/to/your_script.shstring>
array>
<key>RunAtLoadkey>
<true/>
<key>KeepAlivekey>
<true/>
dict>
launchctl load ~/Library/LaunchAgents/your.script.plist
方案 | 是否需要命令 | 合盖后效果 | 适用场景 |
---|---|---|---|
caffeinate |
需要 | 持续运行 | 临时任务 |
修改 systemsetup |
需要 sudo | 持续运行 | 长期任务(需手动恢复) |
tmux /nohup |
需要 | 可能暂停 | 远程 SSH 任务 |
launchd 守护进程 |
配置一次 | 持续运行 | 生产环境长期运行 |
在 macOS 中,systemsetup
是一个强大的命令行工具,用于配置系统级别的硬件和能源设置。以下是关于 systemsetup
的详细使用方法和常见场景:
sudo systemsetup -set<选项> <参数>
sudo systemsetup -get<选项>
⚠️ 需要管理员权限(
sudo
)
功能 | 命令 | 备注 |
---|---|---|
禁用睡眠 | sudo systemsetup -setcomputersleep Never |
合盖/息屏不睡眠 |
设置睡眠时间 | sudo systemsetup -setcomputersleep 30 |
30分钟后睡眠 |
禁用显示器睡眠 | sudo systemsetup -setdisplaysleep Never |
仅屏幕不关闭 |
获取当前设置 | sudo systemsetup -getcomputersleep |
查看睡眠超时 |
# 启用网络唤醒
sudo systemsetup -setwakeonnetworkaccess on
# 检查状态
sudo systemsetup -getwakeonnetworkaccess
# 使用NTP时间同步
sudo systemsetup -setnetworktimeserver time.apple.com
sudo systemsetup -setusingnetworktime on
# 指定启动磁盘
sudo systemsetup -setstartupdisk /Volumes/macOS
# 列出可用启动磁盘
sudo systemsetup -liststartupdisks
pmset -g
# 电池模式下不休眠
sudo pmset -b sleep 0
# 电源适配器模式下不休眠
sudo pmset -c sleep 0
# 合盖时不睡眠(需重启生效)
sudo pmset -a disablesleep 1
# 恢复默认
sudo pmset -a disablesleep 0
# 允许SSH唤醒(需先启用网络唤醒)
sudo systemsetup -setremoteappleevents on
# 查看睡眠/唤醒日志
log show --predicate 'eventMessage contains "Sleep"' --last 24h
# 恢复所有睡眠设置默认值
sudo pmset -a restoredefaults
-a
参数表示所有电源模式(-b
=电池,-c
=电源适配器)如果不想用命令行,可以通过以下路径修改:
通过 systemsetup
和 pmset
的组合使用,你可以精准控制 Mac 的睡眠行为,满足后台脚本持续运行的需求。