Come impedire la sospensione del Mac dalla riga di comando?


12

Ho uno script di lunga durata sul computer remoto.

Non voglio terminare la mia sessione SSH e devo inserirla in uno script di shell.

Come è possibile impedire che il mio Mac si addormenti dalla riga di comando?


3
Quale versione di OS X?
Nohillside

Risposte:


19

In Mountain Lion puoi usare il caffeinatecomando.

caffeinate -u -t 1000

impedirà il sonno inattivo per 1000 secondi.


1
Non ho ancora avuto successo con qualsiasi combinazione di cmdline "caffeinate" (inclusa una sopra) né con Caffeina.app in Mavericks che impedisce il sonno alla chiusura del coperchio. InsomniaX.app è l'unica cosa che finora ha impedito il sonno del coperchio, ma non ha ancora trovato una versione cmdline funzionante (non ha ancora fatto funzionare goo.gl/CU06jb - potrebbe essere obsoleto). Tuttavia, voglio qualcosa che abiliti i requisiti di visualizzazione della password anche quando si nega il sonno per un tempo limitato e programmabile alla chiusura del coperchio ... e InsomniaX.app non sembra farlo neanche.
Johnny Utahh,

1
Problemi simili. Sono su Yosemite, e anche se corro caffeinato nel terminale, dopo un po 'lo schermo si oscura e devo riconnettermi. Questo mi suggerisce che il caffeinato non tiene sveglio il Mac, che è il mio obiettivo in modo che la connessione Wifi può persistere / qualunque cosa io stia succedendo può procedere.
Dmonopoli

12

La soluzione a questo problema non è quella di mantenere sveglio il client (Mac). L'uso di approcci come questo non è affidabile. Cosa succede se si perde la connessione di rete? Anche se il tuo Mac è sveglio, la sceneggiatura si interromperà.

Uso nohup

Se viene chiamato il tuo script di lunga durata eternity.sh, prova quanto segue:

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

Ora puoi persino chiudere la connessione e lo script continuerà a funzionare . Gli &sfondi del processo in modo da poter mantenere aperta la connessione e immettere i comandi. Visualizza qualsiasi output dal tuo script tramite:

tail -f /path/to/output.out

I percorsi negli esempi sono facoltativi se lo script si trova sul proprio percorso e si desidera scrivere l'output dello script output.outnella directory corrente.

Gestisco script che vengono eseguiti per giorni alla volta. Script come questi dovrebbero essere staccati dal terminale. Per fortuna, nohupfornisce un invocazione di comando facile da ricordare per raggiungere questo obiettivo - non pensare ad alcun problema .


5
Vedi anche man screen.

@mankoff - sto già usando lo schermo. È il miglior comando dalla scoperta di una razza affettata. ;) Il punto principale della domanda è l'elevata necessità della "ssh to @ somewhere" quando il mio mac si addormenta - semplicemente non voglio terminare la mia sessione ssh - il mio comando sul lato remoto è già "protetto" con lo schermo . ;)
kobame,

@fsmith - la domanda era: come eliminare la sessione ssh terminare ... ofc nohup è utile per situazioni in cui il comando remoto non è interattivo. Per i comandi interattivi lo schermo è una soluzione molto migliore. Grazie comunque per la risposta.
Kobame,

1
@kobame, forse il punto della domanda e queste informazioni aggiuntive avrebbero dovuto essere incluse nella domanda originale. La prima riga della domanda si riferiva a uno script di lunga durata. Ho pensato che non fosse interattivo che ha portato al riferimento a Nohup.
ephsmith,

@kobame, una di queste risposte ha risolto il tuo problema?
ephsmith,

8

Un'altra opzione è pmset . Utilizzare il comando pmset noidle per impedire il sonno finché pmsetè in esecuzione. Sfortunatamente, richiede una finestra Terminale separata con l' pmsetesecuzione. Tuttavia, l'altra opzione, caffeinateti consente solo di impostare un determinato orario . Quindi si tratta di scegliere se si desidera aprire una seconda sessione SSH o gestire un vincolo di tempo.

Modifica: secondo il commento di binarybob , puoi effettivamente eseguirlo in background in questo modo: pmset noidle &per tornare a pmsetdigitare fg.


È inoltre possibile eseguire pmsetin background utilizzando pmset noidle &e quindi continuare a utilizzare il prompt dei comandi corrente. Digita fgper tornare pmsetindietro, a quel punto puoi Ctrl + C it
binarybob

@binarybob Oh! Non lo sapevo. Grazie per il consiglio!
daviesgeek,

@davisgeek - davvero bello! Grazie per la punta.
Kobame,

1
questo funziona anche nel notebook IPython: !pmset noidle- molto bello quando si dispone di un desktop che serve notebook IPython e un laptop che si connette da remoto.
Jason S,

1
Questo non funziona per me. Funziona correttamente, viene visualizzato il messaggio "Prevenzione della sospensione inattiva (^ C per uscire) ...", ma va ancora in sospensione.
Iulian Onofrei il

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

Spiegazione:

-i - Prevenire il sonno inattivo.

-s- Prevenire la sospensione del sistema (completamente, anche se si chiude il coperchio). Nota: funziona solo con alimentazione CA.

/bin/ssh- Continua a scrivere il comando che vuoi eseguire. Anche l'utilizzo sshdiretto invece di /bin/sshdovrebbe funzionare.

Risultati: il sistema non dormirà finché il sshcomando è in esecuzione.



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.