在 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 的睡眠行為,滿足后臺腳本持續運行的需求。