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 的睡眠行为,满足后台脚本持续运行的需求。

相关推荐
請你喝杯Java3 小时前
Mac上Cursor无法安装插件解决方法
macos·cursor·vsode
网络之路Blog6 小时前
【实战中提升自己】内网安全部署之端口隔离与MAC地址认证
安全·macos·网络之路一天·华为华三数通基础·华为华三企业实战架构·华为中小型企业实战·华为华三计算机网络基础
心随_风动6 小时前
主流操作系统对比分析(macOS、Linux、Windows、Unix)
linux·windows·macos
Brian_Lucky10 小时前
在 macOS 上合并 IntelliJ IDEA 的项目窗口
java·macos·intellij-idea
未来之窗软件服务12 小时前
声音分离人声和配乐-从头设计数字生命第5课, demucs——仙盟创梦IDE
ide·macos·xcode·仙盟创梦ide·数字生命
我该如何取个名字1 天前
Mac mini 安装mysql数据库以及出现的一些问题的解决方案
数据库·mysql·macos
ttumetai1 天前
MacOS中安装Python(homebrew,pyenv)
python·macos
我->是->谁1 天前
VMware Fusion Pro 13 Mac版虚拟机 安装Win11系统教程
macos
Lilith的AI学习日记1 天前
n8n 中文系列教程_05.如何在本机部署/安装 n8n(详细图文教程)
运维·windows·macos·ai编程·n8n