在 macOS 系统下,当屏幕息屏或合上盖子时,后台脚本程序是否会继续运行,主要取决于以下几个因素:
1. 系统睡眠状态的影响
- 默认情况:合盖/息屏后,Mac 会进入「睡眠模式」(部分硬件休眠),此时:
- CPU 任务:后台脚本(如 Python、Shell 脚本)通常会被暂停。
- 网络请求:未完成的网络连接可能中断。
- 例外情况:如果启用了「防止睡眠」模式,脚本会继续运行。
2. 如何保持脚本持续运行
✅ 方法 1:使用 caffeinate
命令(系统自带)
# 运行脚本时阻止睡眠(直到脚本结束)
caffeinate -s ./your_script.sh
# 或者永久阻止睡眠(需手动终止)
caffeinate -dims &
./your_script.sh
参数说明:
-d
:阻止显示器睡眠-i
:阻止系统空闲睡眠-m
:阻止磁盘睡眠-s
:阻止系统睡眠(合盖仍有效)
✅ 方法 2:修改能源管理设置
# 临时禁用睡眠(需 sudo 密码)
sudo systemsetup -setcomputersleep Never
# 恢复默认设置
sudo systemsetup -setcomputersleep 30
✅ 方法 3:使用 tmux
或 nohup
# 使用 tmux(推荐)
tmux new -s mysession
./your_script.sh
# 按 Ctrl+B → D 脱离会话(脚本继续运行)
# 使用 nohup
nohup ./your_script.sh &
3. 验证脚本是否在后台运行
# 查看所有进程
ps aux | grep your_script
# 查看系统睡眠状态
pmset -g assertions
如果输出中包含 PreventUserIdleSystemSleep
,说明防睡眠已生效。
4. 常见问题解决
-
问题:合盖后 SSH 断开导致脚本终止
方案:通过tmux
/screen
运行脚本,或使用内网穿透工具(如 frp)。 -
问题:依赖 GUI 的脚本失败
方案:改用无头模式(如headless
浏览器)或 CLI 工具。
5. 自动化建议
如果需要长期运行后台任务,建议:
- 用
launchd
配置守护进程:<!-- ~/Library/LaunchAgents/your.script.plist --> <dict> <key>Label</key> <string>your.script</string> <key>ProgramArguments</key> <array> <string>/path/to/your_script.sh</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> </dict>
- 加载配置:
launchctl load ~/Library/LaunchAgents/your.script.plist
📌 总结表:Mac 息屏后脚本运行方案
方案 | 是否需要命令 | 合盖后效果 | 适用场景 |
---|---|---|---|
caffeinate | 需要 | 持续运行 | 临时任务 |
修改 systemsetup | 需要 sudo | 持续运行 | 长期任务(需手动恢复) |
tmux /nohup | 需要 | 可能暂停 | 远程 SSH 任务 |
launchd 守护进程 | 配置一次 | 持续运行 | 生产环境长期运行 |
systemsetup使用方法
在 macOS 中,systemsetup
是一个强大的命令行工具,用于配置系统级别的硬件和能源设置。以下是关于 systemsetup
的详细使用方法和常见场景:
1. 基本命令语法
sudo systemsetup -set<选项> <参数>
sudo systemsetup -get<选项>
⚠️ 需要管理员权限(
sudo
)
2. 常用命令示例
🔹 睡眠与唤醒控制
功能 | 命令 | 备注 |
---|---|---|
禁用睡眠 | sudo systemsetup -setcomputersleep Never | 合盖/息屏不睡眠 |
设置睡眠时间 | sudo systemsetup -setcomputersleep 30 | 30分钟后睡眠 |
禁用显示器睡眠 | sudo systemsetup -setdisplaysleep Never | 仅屏幕不关闭 |
获取当前设置 | sudo systemsetup -getcomputersleep | 查看睡眠超时 |
🔹 网络唤醒(Wake-on-LAN)
# 启用网络唤醒
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
3. 能源管理相关命令
查看所有能源设置:
pmset -g
单独配置电池/电源适配器模式:
# 电池模式下不休眠
sudo pmset -b sleep 0
# 电源适配器模式下不休眠
sudo pmset -c sleep 0
4. 实用技巧
🔸 防止合盖睡眠(同时允许其他睡眠)
# 合盖时不睡眠(需重启生效)
sudo pmset -a disablesleep 1
# 恢复默认
sudo pmset -a disablesleep 0
🔸 SSH远程唤醒
# 允许SSH唤醒(需先启用网络唤醒)
sudo systemsetup -setremoteappleevents on
🔸 日志查看
# 查看睡眠/唤醒日志
log show --predicate 'eventMessage contains "Sleep"' --last 24h
5. 恢复默认设置
# 恢复所有睡眠设置默认值
sudo pmset -a restoredefaults
⚠️ 注意事项
- 部分设置需要重启生效
- 长期禁用睡眠可能导致过热
- 使用
-a
参数表示所有电源模式(-b
=电池,-c
=电源适配器)
6. 图形化替代方案
如果不想用命令行,可以通过以下路径修改:
- 系统设置 > 电池 > 调整睡眠时间
- 系统设置 > 锁定屏幕 > 关闭「睡眠时锁定屏幕」
通过 systemsetup
和 pmset
的组合使用,你可以精准控制 Mac 的睡眠行为,满足后台脚本持续运行的需求。