Halten Sie Mac OSX auf dem Laufenden, während die Aufgabe / App ausgeführt wird

10

Ich möchte rsync stundenlang über WLAN arbeiten lassen und die Wechselstromversorgung einschalten. Aber wenn ich das tue, unterbricht der Mac nach einiger Zeit die Verbindung.

Im Bereich "Energieeinstellungen" sind "Computer nie in den Ruhezustand versetzen", "Festplatte nach Möglichkeit in den Ruhezustand versetzen" und "Für Netzwerkzugriff aktivieren" konfiguriert.

Außerdem wäre es gut, wenn der Mac tatsächlich schlafen geht, sobald die Aufgabe erledigt ist.

Mir ist klar, dass bereits eine sehr ähnliche Frage gestellt wurde und dass es pmset und InsomniaX gibt , aber ich möchte nicht, dass die Maschine schlaflos ist . Und ich möchte nicht immer mehr Erweiterungen installieren und auch nicht jedes Mal pmset optimieren müssen.

Ich möchte, dass es sich von Haus aus wie erwartet verhält - wach bleiben, während ich eine Aufgabe laufen lasse, und dann "wenn möglich" schlafen gehen. Diese Zeit ist auf rsync zurückzuführen, aber das nächste Mal könnte etwas anderes sein.

Erwarte ich wie immer zu viel? Kann ich das beheben? Ist es überhaupt kaputt?

Cregox
quelle

Antworten:

10

Koffeinat

Zum Beispiel:

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

Von der Manpage:

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.

Es kann auch für Situationen wie "Lassen Sie das Display nicht schlafen, während ich diesen Film schaue" verwendet werden:

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

... oder "die nächsten 10.000 Sekunden wach bleiben":

caffeinate -t 10000

Siehe man caffeinatefür Details.

Nathan Long
quelle
2
Das ist wahnsinnig genial! Ist dies die Standardeinstellung unter OSX? Seit welcher Version? (Ich konnte nicht schnell Informationen darüber finden)
Cregox
@Cawas - Laut diesem Artikel wurde der Versand mit Mountain Lion gestartet : cnet.com/news/… Ich habe davon erfahrenman pmset , wo die noidleOption als veraltet aufgeführt ist.
Nathan Long
Siehe auch dieses nette Tutorial: computer.tutsplus.com/tutorials/…
Nathan Long
4

Jiggler kann so eingestellt werden, dass die Maus nur "läuft", wenn sie läuft. Dadurch wird verhindert, dass der Bildschirm und der Computer in den Ruhezustand versetzt werden. Dies funktioniert bei einem Laptop mit geschlossenem Deckel nicht. Dafür benötigen Sie InsomniaX oder eine andere kextbasierte Anwendung.

Geben Sie hier die Bildbeschreibung ein

Josh K.
quelle
Kein Deckel geschlossen, das ist in Ordnung. Ich will keine Überhitzung.
Cregox
Tatsächlich eine praktische kleine Anwendung.
Ayaz
Nun, obwohl ich es nicht mehr brauche, hat dies mein Problem tatsächlich gelöst und es scheint eine schöne Lösung zu sein. Ich denke, ich hätte es schon früher akzeptieren sollen.
Cregox
2

Eine andere Alternative ist Koffein . Es ist eine App - keine Erweiterung -, die die Maschine für einen bestimmten Zeitraum "aktiv" hält. Danach kann die Maschine alles tun, was sie normalerweise tun würde: leer werden, Bildschirmschoner ausführen, schlafen usw. Das heißt, sie hat gewonnen. Schalten Sie Ihre Maschine nicht in den Ruhezustand, sondern lassen Sie sie. Es scheint funktional gleichbedeutend damit zu sein, die Energiespareinstellungen für den gewünschten Zeitraum auf "nie" zu setzen und sie anschließend wiederherzustellen.

Geben Sie hier die Bildbeschreibung ein

JRobert
quelle
Sie müssen die App jedoch noch starten und stoppen. Sie können es nicht einstellen und vergessen.
Josh K
1

Sie können eine Stay-Open-Applescript-Anwendung erstellen, mit der der Sleep-Timer basierend auf dem Vorhandensein eines laufenden Prozesses festgelegt / zurückgesetzt wird. Das Erstellen einer Launchd-Liste ist ebenfalls eine praktikable Lösung, aber ich bin immer noch wackelig in Bezug auf die Syntax. Der Befehl "pmset force sleep X" erfordert keinen Root-Zugriff, aber die Einstellungen werden beim Neustart zurückgesetzt.

Da Ihre Situation so klingt, als ob ich nicht in der Lage sein werde, alle Ihre Bedürfnisse vorherzusehen, werde ich etwas für Sie skizzieren.

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

Für Dinge wie Rsync und Hintergrundprozesse müssen Sie schlauer werden und andere Funktionen wie $ top abfragen.

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

Beachten Sie, dass im obigen Fall die Suche nach nur "rsync" ein falsches Positiv zurückgibt, wenn rsyncd ausgeführt wird, da sowohl "rsync" als auch "rsyncd" übereinstimmen. Möglicherweise müssen Sie kniffliger werden, wenn dies bei Ihnen nicht funktioniert.

Wenn die Anwendung ein Windows-Prozess wäre, würde ich Folgendes verwenden, um zu bestimmen, was ausgeführt wird:

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

Oder für Bündelkennungen (genauer)

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

Erzählen Sie mir mehr über Ihr Szenario und ich werde versuchen, etwas genaueres und flexibleres zu schreiben.

dotHTM
quelle
verdammt, ich werde mir alles ansehen, was du hier ein anderes Mal gesagt hast, aber danke, dass du all diese Schwierigkeiten durchgemacht hast! Ich denke jedoch nicht wirklich darüber nach, Skripte zu schreiben. :)
Cregox
Vielen Dank, dass Sie meine Antwort wieder auf einen nicht negativen Wert gebracht haben. Ich lebe von Skripten. Ich bin schrecklich mit BASH, aber ich liebe AppleScript und das Ausführen von Terminal-Befehlen.
dotHTM