AC電源をオンにして何時間もwifi経由でrsyncを動作させておきたい。しかし、そうすると、Macはしばらくして接続を切断します。
[エネルギー設定]ペインでは、[コンピューターをスリープ状態にしない]、[ハードディスクを可能な場合はスリープ状態にする]、[ネットワークアクセスのためにスリープ解除する]に構成されています。
さらに、タスクが完了したら、Macが実際にスリープ状態になると便利です。
私は非常によく似ていることに気づきました 以前に質問がありました そして pmset と insomniaX がありますが、私はマシンを-にしたくありません 眠れない 。そして、私はますます多くの拡張機能をインストールし続けたくありませんし、毎回pmsetを微調整する必要もありません。
ネイティブで期待どおりに動作するようにします。タスクを実行したままにして、「可能な場合」はスリープ状態にします。今回はrsyncによるものですが、次回は別の可能性があります。
いつものように期待しすぎていませんか?修正できますか?それも壊れていますか?
例えば:
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.
また、「この映画を見ている間、ディスプレイをスリープ状態にしない」などの状況にも使用できます。
caffeinate -d # in effect until you hit Ctrl+C
...または「次の10,000秒間起きている」:
caffeinate -t 10000
見る man caffeinate
詳細については。
Jiggler 実行中のマウスのみを「ジグル」するように設定できます。これにより、画面とコンピューターがスリープ状態になるのを防ぎます。これは、ふたを閉めたラップトップでは機能しません。そのためには、InsomniaXまたは別のkextベースのアプリケーションが必要です。
別の選択肢は カフェイン です。これは、拡張機能ではなくアプリであり、指定された期間、マシンを「アクティブ」に保ちます。その後、マシンは、空白にする、スクリーンセーバーを実行する、スリープするなど、通常どおりに実行できます。つまり、マシンをスリープ状態にしますが、スリープ状態にします。これは、必要な期間、省エネ設定を「なし」に設定し、後で復元することと機能的に同等のようです。
実行中のプロセスの存在に基づいてスリープタイマーを設定/リセットするStay-OpenApplescriptアプリケーションの作成を検討することもできます。起動されたplistを作成することも実行可能な解決策ですが、構文についてはまだ不安定です。 「pmsetforcesleep X」コマンドはルートアクセスを必要としませんが、設定は再起動時にリセットされます。
あなたの状況は私があなたのすべてのニーズを予測することができないように思われるので、私はあなたのために何かをスケッチします。
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
あなたのシナリオについて詳しく教えてください。より正確で、より柔軟なユーザーインターフェイスを使用して何かを書こうと思います。