macOS 系统设置息屏情况下,PHP等后台脚本继续执行

在 macOS 系统下,当屏幕息屏或合上盖子时,后台脚本程序是否会继续运行,主要取决于以下几个因素:

1. 系统睡眠状态的影响

  • 默认情况 :合盖/息屏后,Mac 会进入「睡眠模式」(部分硬件休眠),此时:
    • CPU 任务:后台脚本(如 Python、Shell 脚本)通常会被暂停。
    • 网络请求:未完成的网络连接可能中断。
  • 例外情况:如果启用了「防止睡眠」模式,脚本会继续运行。

2. 如何保持脚本持续运行

✅ 方法 1:使用 caffeinate 命令(系统自带)
bash 复制代码
# 运行脚本时阻止睡眠(直到脚本结束)
caffeinate -s ./your_script.sh

# 或者永久阻止睡眠(需手动终止)
caffeinate -dims &
./your_script.sh

参数说明

  • -d:阻止显示器睡眠
  • -i:阻止系统空闲睡眠
  • -m:阻止磁盘睡眠
  • -s:阻止系统睡眠(合盖仍有效)
✅ 方法 2:修改能源管理设置
bash 复制代码
# 临时禁用睡眠(需 sudo 密码)
sudo systemsetup -setcomputersleep Never

# 恢复默认设置
sudo systemsetup -setcomputersleep 30
✅ 方法 3:使用 tmuxnohup
bash 复制代码
# 使用 tmux(推荐)
tmux new -s mysession
./your_script.sh
# 按 Ctrl+B → D 脱离会话(脚本继续运行)

# 使用 nohup
nohup ./your_script.sh &

3. 验证脚本是否在后台运行

bash 复制代码
# 查看所有进程
ps aux | grep your_script

# 查看系统睡眠状态
pmset -g assertions

如果输出中包含 PreventUserIdleSystemSleep,说明防睡眠已生效。

4. 常见问题解决

  • 问题 :合盖后 SSH 断开导致脚本终止
    方案 :通过 tmux/screen 运行脚本,或使用内网穿透工具(如 frp)。

  • 问题 :依赖 GUI 的脚本失败
    方案 :改用无头模式(如 headless 浏览器)或 CLI 工具。

5. 自动化建议

如果需要长期运行后台任务,建议:

  1. launchd 配置守护进程:

    xml 复制代码
    <!-- ~/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>
  2. 加载配置:

    bash 复制代码
    launchctl load ~/Library/LaunchAgents/your.script.plist

📌 总结表:Mac 息屏后脚本运行方案

方案 是否需要命令 合盖后效果 适用场景
caffeinate 需要 持续运行 临时任务
修改 systemsetup 需要 sudo 持续运行 长期任务(需手动恢复)
tmux/nohup 需要 可能暂停 远程 SSH 任务
launchd 守护进程 配置一次 持续运行 生产环境长期运行

systemsetup使用方法

在 macOS 中,systemsetup 是一个强大的命令行工具,用于配置系统级别的硬件和能源设置。以下是关于 systemsetup 的详细使用方法和常见场景:


1. 基本命令语法

bash 复制代码
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)
bash 复制代码
# 启用网络唤醒
sudo systemsetup -setwakeonnetworkaccess on

# 检查状态
sudo systemsetup -getwakeonnetworkaccess
🔹 时间同步
bash 复制代码
# 使用NTP时间同步
sudo systemsetup -setnetworktimeserver time.apple.com
sudo systemsetup -setusingnetworktime on
🔹 启动磁盘设置
bash 复制代码
# 指定启动磁盘
sudo systemsetup -setstartupdisk /Volumes/macOS

# 列出可用启动磁盘
sudo systemsetup -liststartupdisks

3. 能源管理相关命令

查看所有能源设置:
bash 复制代码
pmset -g
单独配置电池/电源适配器模式:
bash 复制代码
# 电池模式下不休眠
sudo pmset -b sleep 0

# 电源适配器模式下不休眠
sudo pmset -c sleep 0

4. 实用技巧

🔸 防止合盖睡眠(同时允许其他睡眠)
bash 复制代码
# 合盖时不睡眠(需重启生效)
sudo pmset -a disablesleep 1

# 恢复默认
sudo pmset -a disablesleep 0
🔸 SSH远程唤醒
bash 复制代码
# 允许SSH唤醒(需先启用网络唤醒)
sudo systemsetup -setremoteappleevents on
🔸 日志查看
bash 复制代码
# 查看睡眠/唤醒日志
log show --predicate 'eventMessage contains "Sleep"' --last 24h

5. 恢复默认设置

bash 复制代码
# 恢复所有睡眠设置默认值
sudo pmset -a restoredefaults

⚠️ 注意事项

  1. 部分设置需要重启生效
  2. 长期禁用睡眠可能导致过热
  3. 使用 -a 参数表示所有电源模式(-b=电池,-c=电源适配器)

6. 图形化替代方案

如果不想用命令行,可以通过以下路径修改:

  1. 系统设置 > 电池 > 调整睡眠时间
  2. 系统设置 > 锁定屏幕 > 关闭「睡眠时锁定屏幕」

通过 systemsetuppmset 的组合使用,你可以精准控制 Mac 的睡眠行为,满足后台脚本持续运行的需求。

相关推荐
CHANG_THE_WORLD1 小时前
「macOS 系统字体收集器 (C++17 实现)」
开发语言·c++·macos
小Lu的开源日常2 小时前
在 macOS 上设置 SSH 和 Git
git·macos·ssh
朴拙数科4 小时前
在 macOS 上安装与自定义 Oh My Zsh:让终端美观又高效 [特殊字符]
大数据·elasticsearch·macos
小Lu的开源日常5 小时前
在 Mac 上使用 iTerm2 和 Oh My Zsh 打造优雅终端
macos·iterm·命令行
tonngw6 小时前
【Mac 从 0 到 1 保姆级配置教程 19】- 英语学习篇-我的英语工作流分享(AI 辅助学习)
macos·mac·英语学习·沉浸式翻译·欧路词典·沙拉查词·终生学习
lianyinghhh7 小时前
yolo8实现目标检测
yolo·目标检测·macos
困惑阿三9 小时前
Mac mini 高性价比扩容 + Crossover 游戏实测 全流程手册
游戏·macos
Jay_2711 小时前
Mac-右键用 VS Code 打开文件夹
macos
一只帆記1 天前
Mac中Minicom串口调试基础使用
macos
摆烂工程师1 天前
(5千字总结)国内如何安装和使用 Claude Code 的保姆级教程 - 支持Mac和Windows用户
windows·macos·claude