タスク/アプリの実行中にMac OSXを起動してスリープしない


10

AC電源をオンにしたまま、rsyncをwifiで何時間も動作させておきたい。しかし、そうすると、しばらくするとMacが接続を切断します。

[エネルギー設定]ペインで、[コンピューターがスリープしない]、[可能な場合はハードディスクをスリープさせる]、および[ネットワークアクセスのためにスリープ解除する]に構成されています。

さらに、タスクが完了したら、Macが実際にスリープ状態になればよいでしょう。

私は非常によく似実現質問をする前に求められているとがあることをpmsetinsomniaXが、私はマシンがしたくない眠れません。そして、私はますます多くの拡張機能をインストールし続けたくないし、毎回pmsetを微調整する必要もありません。

本来どおりに動作するようにしたい-タスクを実行している間は起床し、「可能な場合」はスリープ状態にする。今回はrsyncが原因ですが、次回は別の可能性があります。

いつものように期待しすぎですか?修正できますか?それも壊れていますか?

回答:


10

カフェイン

例えば:

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

manページから:

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.

「この映画を見ている間、ディスプレイをスリープさせないでください」などの状況にも使用できます。

caffeinate -d # in effect until you hit Ctrl+C

...または「次の10,000秒間起きている」:

caffeinate -t 10000

詳細man caffeinateについては、を参照してください。


2
これはめちゃくちゃ素晴らしいです!これはOSXのデフォルトですか?どのバージョンから?(私はこれに関する情報をすぐに見つけることができませんでした)
cregox

@Cawas-この記事によると、Mountain Lionでの出荷を開始しました:cnet.com/news/…私はそれをから見つけましたman pmset。このnoidleオプションは非推奨としてリストされています。
Nathan Long

:また、この素敵なチュートリアルを参照computers.tutsplus.com/tutorials/...
ネイサンロング

4

ジグラーは、実行中にマウスを「ジグル」するようにのみ設定できます。これにより、画面とコンピュータがスリープ状態になります。これは、ふたが閉じているラップトップでは機能しません。そのためには、InsomniaXまたは別のkextベースのアプリケーションが必要です。

ここに画像の説明を入力してください


ふたを閉めなくても大丈夫です。過熱したくない。
cregox 2010

実際、便利な小さなアプリケーションです。
ayaz 2010

まあ、私はそれを再び必要としませんが、これは実際に私の問題を解決しました、そしてそれは素晴らしい解決策のようです。私は以前にそれを受け入れたはずだったと思います。
cregox

2

別の選択肢はカフェインです。これはアプリであり、拡張機能ではありません。指定された期間、マシンを「アクティブ」に保ち、その後、マシンは通常実行するすべてのことを実行できます:ブランク、スクリーンセーバーの実行、スリープなど。つまり、 tマシンをスリープ状態にしますが、スリープ状態にします。これは、機能的には、要求した期間の省エネルギー設定を「なし」に設定し、後で復元することと同じように見えます。

ここに画像の説明を入力してください


しかし、それでもアプリを起動および停止する必要があります。設定して忘れることはできません。
Josh K

1

実行中のプロセスの存在に基づいてスリープタイマーを設定/リセットするStay-Open Applescriptアプリケーションを作成することを検討する場合があります。launchd plistを作成することも実行可能な解決策ですが、構文はまだ不安定です。「pmset force sleep X」コマンドはrootアクセスを必要としませんが、設定は再起動時にリセットされます。

あなたの状況は私があなたのあらゆるニーズを予測することができないように聞こえるので、私はあなたのために何かをスケッチします。

property LoopTime: 5 --measured in seconds
property normalSleepTimeout: 30 --measured in minutes
property processName: "rsync"  --the name of the process you're trying to find

on run
   do shell script "pmset force sleep 0"  --disables sleep
   idle()
end

on idle
   if not appIsRunning() then 
      do shell script ("pmset force sleep " & normalSleepTimeout as string) -- sets sleep to desired idle timeout
      quit
   end
   return 
end

on appIsRunning()
   --Here's where you need to do the test that an app is running.  True needs to mean "the app is running".  Store the value to "result" or change the below return statement.

   return result
end

rsyncやバックグラウンドプロセスのようなものについては、より賢くして$ topのような他の関数をポーリングする必要があります。

set result to False
if 0 < (count of (do shell script ("top -l 1 | grep" & processName as string))) then
   set result to True
end

上記の場合、「rsync」と「rsyncd」の両方が一致するため、rsyncdが実行されている場合、「rsync」だけを検索すると誤検知が返されることに注意してください。これがうまくいかない場合は、さらに注意する必要があるかもしれません。

アプリケーションがウィンドウ化されたプロセスである場合、私は以下を使用して何が実行されているかを判断します。

tell application "System Events" to set RunningAppNames to name of processes

またはバンドル識別子の場合(より正確)

tell application "System Events" to set RunningBundles to bundle identifier of processes

あなたのシナリオについて詳しく教えてください。より正確でより柔軟なユーザーインターフェイスで何かを書こうとします。


ダム、ここであなたが言ったすべてのことを別の機会に見ていきますが、このすべての問題を解決してくれてありがとう!今のところ、スクリプトを書くことはあまり考えていません。:)
cregox 2010

私の回答を負でない値に戻してくれてありがとう。私はスクリプトで生活しています。私はBASHでひどいですが、私はAppleScriptが大好きで、そこからターミナルコマンドを実行します。
dotHTM
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.