Ho uno script di lunga esecuzione sul computer remoto.
Non voglio terminare la mia sessione ssh, e ho bisogno di inserirla in uno script di shell.
Come è possibile evitare che il mio Mac cada nella modalità di sospensione dalla riga di comando?
In Mountain Lion puoi utilizzare il comando caffeinate
.
caffeinate -u -t 1000
preverrà il riposo inattivo per 1000 secondi.
La soluzione a questo problema è non mantenere sveglio il client (il tuo Mac). Usare approcci come questo è inderogabile. Cosa succede se la connessione di rete viene persa? Anche se il tuo Mac è sveglio, lo script si fermerà.
Utilizza nohup
Se il tuo script di lunga durata è chiamato eternity.sh
, prova quanto segue:
nohup /path/to/eternity.sh > /path/to/output.out &
Ora puoi anche chiudere la connessione e lo script continuerà a essere in esecuzione . &
descrive il processo in modo da poter mantenere la connessione aperta e immettere comandi. Visualizza qualsiasi output dal tuo script tramite:
tail -f /path/to/output.out
I percorsi negli esempi sono opzionali se lo script è sul tuo percorso e vuoi che l'output dello script sia scritto su output.out
nella directory corrente.
Gestisco script che vengono eseguiti per giorni alla volta. Script come questi dovrebbero essere staccati dal terminale. Fortunatamente, nohup
fornisce un'invocazione di comando facile da ricordare per ottenere questo risultato - pensa no hangup .
Un'altra opzione è pmset . Utilizza il comando pmset noidle
per impedire il sonno finché pmset
è in esecuzione. Sfortunatamente, richiede una finestra Terminale separata con pmset
in esecuzione al suo interno. Tuttavia, l'altra opzione, caffeinate
, ti consente solo di impostare un certo tempo . Quindi si tratta di scegliere se si desidera aprire una seconda sessione SSH o gestire un limite di tempo.
Modifica: in base a commento di binarybob , puoi effettivamente eseguirlo in background in questo modo: pmset noidle &
Per tornare a pmset
tipo fg
.
caffeinate -i -s /bin/ssh ...
Spiegazione:
-i
- Impedisci il riposo inattivo.
-s
- Previene la sospensione del sistema (interamente, anche se chiudi il coperchio). Nota: funziona solo con alimentazione CA.
/bin/ssh
- Continua a scrivere il comando che vuoi eseguire. Anche l'utilizzo di ssh
direttamente anziché /bin/ssh
dovrebbe funzionare.
Risultati: il tuo sistema non dormirà fintanto che il comando ssh
è in esecuzione.
Se stai cercando l'opzione nucleare come lo ero io:
sudo systemsetup -setcomputersleep Never
Leggi altre domande sui tag command-line sleep-wake