Wie kann verhindert werden, dass der Mac in den Ruhezustand wechselt?


12

Ich habe ein lang laufendes Skript auf dem Remotecomputer.

Ich möchte meine SSH-Sitzung nicht beenden und muss sie in ein Shell-Skript eingeben.

Wie kann verhindert werden, dass mein Mac über die Befehlszeile in den Ruhezustand wechselt?


3
Welche OS X-Version?
Nohillside

Antworten:


19

In Mountain Lion können Sie den caffeinateBefehl verwenden.

caffeinate -u -t 1000

verhindert den Leerlauf für 1000 Sekunden.


1
Ich hatte noch keinen Erfolg mit einer Coffein-Cmeinline-Kombination (einschließlich einer der oben genannten) oder Caffeine.app in Mavericks, die den Schlaf beim Schließen des Deckels verhindert. InsomniaX.app ist nur , was so weit Deckel Schlaf verhindert hat, aber noch nicht eine funktionierende cmdline Version gefunden (noch nicht gemacht goo.gl/CU06jb Arbeit - sie eventuell veraltete). Trotzdem möchte ich etwas, das die Anforderung eines Anzeigekennworts ermöglicht, auch wenn der Schlaf für eine begrenzte, programmierbare Zeit beim Schließen des Deckels verweigert wird ... und InsomniaX.app scheint dies auch nicht zu tun.
Johnny Utahh

1
Ähnliche Probleme. Ich bin auf Yosemite und obwohl ich im Terminal Koffein laufen lasse, wird der Bildschirm nach einer Weile dunkel und ich muss mich erneut anmelden. Dies deutet darauf hin, dass Koffein den Mac nicht wach hält, was mein Ziel ist Die Wifi-Verbindung kann bestehen bleiben / was auch immer ich gerade mache, kann fortgesetzt werden.
Dmonopol

11

Die Lösung für dieses Problem ist nicht hält den Client (Mac) wach. Solche Ansätze sind nicht verlässlich. Was passiert, wenn die Netzwerkverbindung unterbrochen wird? Selbst wenn Ihr Mac wach ist, wird das Skript angehalten.

Benutzen nohup

Wenn Ihr lang laufendes Skript aufgerufen wird eternity.sh, versuchen Sie Folgendes:

nohup /path/to/eternity.sh > /path/to/output.out &

Jetzt können Sie sogar die Verbindung schließen und Ihr Skript wird weiter ausgeführt . Die &Hintergründe des Prozesses, damit Sie die Verbindung offen halten und Befehle eingeben können. Zeigen Sie alle Ausgaben Ihres Skripts an über:

tail -f /path/to/output.out

Die Pfade in den Beispielen sind optional, wenn sich das Skript in Ihrem Pfad befindet und die Skriptausgabe output.outin das aktuelle Verzeichnis geschrieben werden soll.

Ich verwalte Skripte, die tagelang ausgeführt werden. Skripte wie diese sollten vom Terminal getrennt werden. Zum Glück nohupbietet dies einen leicht zu merkenden Befehlsaufruf, um dies zu erreichen - denken Sie an kein Auflegen .


5
Siehe auch man screen.

@mankoff - ich benutze bereits Bildschirm. Es ist das beste Kommando seit der Entdeckung einer in Scheiben geschnittenen Rasse. ;) Der Hauptpunkt der Frage ist, die Notwendigkeit des "ssh to @ irgendwo" zu beseitigen, wenn mein Mac einschläft - ich möchte meine ssh-Sitzung einfach nicht beenden - mein Befehl auf der Remote-Seite ist bereits mit dem Bildschirm "geschützt" . ;)
Kobame

@ephsmith - die Frage war: Wie kann man das Beenden der SSH-Sitzung beseitigen? ofc nohup eignet sich für Situationen, in denen Ihr Remote-Befehl kein interaktiver Befehl ist. Für die interaktiven Befehle ist der Bildschirm eine viel bessere Lösung. Trotzdem danke für die Antwort.
Kobame

1
@kobame, vielleicht der Punkt der Frage und diese zusätzlichen Informationen sollten in Ihrer ursprünglichen Frage enthalten sein. Die erste Zeile in Ihrer Frage bezog sich auf ein lang laufendes Skript. Ich nahm an, dass es nicht interaktiv war, was zu dem Hinweis auf nohup führte.
Ephsmith

@kobame, hat eine dieser Antworten Ihr Problem gelöst?
Ephsmith

8

Eine weitere Option ist pmset . Verwenden Sie den Befehl pmset noidle , um den Ruhezustand zu verhindern, solange er ausgeführt pmsetwird. Leider ist ein separates Terminalfenster erforderlich pmset, in dem ausgeführt wird. Mit der anderen Option caffeinatekönnen Sie jedoch nur eine bestimmte Zeit einstellen . Es ist also eine Frage der Wahl, ob Sie eine zweite SSH-Sitzung eröffnen oder sich mit einer Zeitbeschränkung befassen möchten.

Bearbeiten: Laut dem Kommentar von binarybob können Sie es tatsächlich im Hintergrund wie folgt ausführen: pmset noidle &Um zum pmsetTyp zurückzukehren fg.


Sie können die aktuelle Eingabeaufforderung auch pmsetim Hintergrund ausführen pmset noidle &und daher weiter verwenden. Geben Sie fgbekommen pmsetzurück, an welcher Stelle Sie können Strg + C,
binarybob

@ Binärbob Oh! Das wusste ich nicht. Danke für den Tipp!
Daviesgeek

@davisgeek - wirklich schön! Danke für den Tipp.
Kobame

1
Dieser funktioniert auch in IPython-Notebooks: !pmset noidle- Sehr schön, wenn Sie einen Desktop haben, der IPython-Notebooks bedient, und einen Laptop, der eine Remoteverbindung herstellt.
Jason S

1
Das funktioniert bei mir nicht. Es wird erfolgreich ausgeführt, die Meldung "Verhindern des Leerlaufs (^ C zum Beenden) ..." wird angezeigt, aber es wird weiterhin in den Ruhezustand versetzt.
Iulian Onofrei

6
caffeinate -i -s /bin/ssh ...

Erläuterung:

-i - Vermeiden Sie müßigen Schlaf.

-s- Verhindern Sie den Systemschlaf (vollständig, auch wenn Sie den Deckel schließen). Hinweis: Es funktioniert nur bei Wechselstrom.

/bin/ssh- Schreiben Sie einfach weiter den Befehl, den Sie ausführen möchten. Die sshdirekte Verwendung anstelle von /bin/sshsollte ebenfalls funktionieren.

Ergebnisse: Ihr System wird nicht in den Ruhezustand versetzt, solange der sshBefehl ausgeführt wird.



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.