web-dev-qa-db-ja.com

bashスクリプトの実行中にMacのスリープを停止し、完了したら通常どおりスリープさせます

Macを夜間に起動し、rsyncを実行してバックアップします。これは、[省エネ]> [スケジュール]で構成されます。

ただし、何かを実行する前にスリープ状態に戻っているようです。そのため、rsyncを実行するbashスクリプトの実行中にスリープ状態を停止する必要があります。

最善の方法は(可能であれば)、スリープタイムアウトを「なし」または非常に長いタイムアウトに設定してrsyncを実行し、完了したら通常に戻すコマンドを発行することです。これを行うためのより良い解決策はありますか?

13
dan-m2k

カフェイン

例えば:

caffeinate -i rsync -avz someuser@somehost:somefolder /some/local/folder

マニュアルページから:

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.

見る man caffeinate 詳細については。

18
Nathan Long

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

これは、pmsetを使用してスリープ設定を変更するよりも優れています。これには、rootアクセスが必要であり、(善良な市民になりたいと仮定して)現在の設定を検出し、完了したら元に戻す方法が必要です。

11
benzado

試してみてください

man pmset

:-)

4
Thorsten79