在 bash 脚本运行时阻止 Mac 进入睡眠状态,然后在完成后让它像往常一样进入睡眠状态

14 mac sleep bash rsync

我让我的 Mac 在夜间醒来并运行 rsync 来备份它。这是通过节能器 > 计划配置的。

然而,它似乎在完成任何事情之前会重新进入睡眠状态,所以我需要在 rsync 运行的 bash 脚本的执行过程中停止它进入睡眠状态。

我认为最好的方法(如果可能的话)是发出一个命令,在 rsyncs 之前将睡眠超时设置为“从不”或很长的超时,然后在完成后恢复正常。有没有更好的解决方案来做到这一点?

Nat*_*ong 21

咖啡因

例如:

caffeinate -i rsync -avz someuser@somehost:somefolder /some/local/folder
Run Code Online (Sandbox Code Playgroud)

从手册页:

EXAMPLE
     caffeinate -i make
        caffeinate forks a process, execs "make" in it, and holds an
        assertion that prevents idle sleep as long as that process
        is running.
Run Code Online (Sandbox Code Playgroud)

详情请参阅man caffeinate


ben*_*ado 11

Mac OS X 10.8 (Mountain Lion) 及更高版本

使用caffeinate命令。请参阅Nathan Long 的回答man caffeinate了解详情。

Mac OS X 10.7 (Lion) 及更早版本

它隐藏在手册页中,但pmset有一个非常简单的模式来防止睡眠。如果您执行该命令,pmset noidle您的 Mac 将保持唤醒状态,直到该进程被终止。以下是在脚本中使用它的方法:

# launch process to prevent sleep and move it to the background
pmset noidle &
# save the process ID
PMSETPID=$!

... do stuff here ...
... don't fall asleep ...
... watch out for that tree!
... ok we're free and clear now ...

# kill pmset so the computer can sleep if it wants to
kill $PMSETPID
Run Code Online (Sandbox Code Playgroud)

这比使用 pmset 更改您的睡眠设置要好,这需要 root 访问权限和(假设您想成为一个好公民)某种检测当前设置并在您完成后将它们更改回来的方法。

  • `pmset noidle` 已被弃用:手册页说:`此参数已被弃用,而支持 caffeinate(8)`。看我的回答。 (2认同)