¿Cómo evitar que Mac duerma desde la línea de comandos?

12

Tengo un script de larga ejecución en la computadora remota.

No quiero terminar mi sesión ssh, y necesito ingresarlo en un script de shell.

¿Cómo es posible evitar que mi Mac se quede dormida desde la línea de comandos?

Kobame
fuente
3
¿Qué versión de OS X?
nohillside

Respuestas:

19

En Mountain Lion puedes usar el caffeinatecomando.

caffeinate -u -t 1000

evitará la inactividad durante 1000 segundos.

Nemo
fuente
1
Todavía no he tenido éxito con ninguna combinación de cmdline de 'cafeína' (incluida una anterior) ni Caffeine.app en Mavericks que impiden dormir al cerrar la tapa. InsomniaX.app es lo único que hasta ahora ha impedido el sueño de la tapa, pero aún no ha encontrado una versión de cmdline que funcione (aún no ha hecho que goo.gl/CU06jb funcione, puede ser obsoleto). Aún así, quiero algo que permita el requisito de contraseña de visualización, incluso mientras niega el sueño por un tiempo limitado y programable al cerrar la tapa ... e InsomniaX.app tampoco parece hacer eso.
Johnny Utahh
1
Problemas similares Estoy en Yosemite, y aunque ejecuto cafeína en la terminal, después de un tiempo la pantalla se oscurece, y tengo que volver a iniciar sesión. Esto me sugiere que la cafeína no mantiene la Mac despierta, que es mi objetivo para que la conexión Wifi puede persistir / lo que sea que esté pasando puede continuar.
dmonopolio
12

La solución a este problema es no mantener despierto al cliente (su Mac). Usar enfoques como este son poco confiables. ¿Qué sucede si se pierde la conexión de red? Incluso si tu Mac está despierta, el script se detendrá.

Utilizar nohup

Si se llama a su script de larga ejecución eternity.sh, intente lo siguiente:

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

Ahora incluso puede cerrar la conexión y su script seguirá ejecutándose . Los &antecedentes del proceso para que pueda mantener la conexión abierta e ingresar comandos. Ver cualquier salida de su script a través de:

tail -f /path/to/output.out

Las rutas en los ejemplos son opcionales si el script está en su ruta y desea que la salida del script se escriba output.outen el directorio actual.

Administro scripts que se ejecutan durante días a la vez. Las secuencias de comandos como estas deberían separarse de la terminal. Afortunadamente, nohupproporciona una invocación de comandos fácil de recordar para lograr esto: no piense en un bloqueo .

ephsmith
fuente
55
Ver también man screen.
@mankoff: ya estoy usando la pantalla. Es el mejor comando desde el descubrimiento de una raza en rodajas. ;) El punto principal de la pregunta es eliminar la necesidad del "ssh a @ en algún lugar" cuando mi mac se duerme - Simplemente no quiero terminar mi sesión ssh - mi comando en el lado remoto ya está "protegido" con pantalla . ;)
Kobame
@ephsmith: la pregunta era: cómo eliminar la sesión ssh terminar ... ofc nohup es bueno para situaciones en las que su comando remoto no es interactivo. Para los comandos interactivos, la pantalla es una solución mucho mejor. Gracias de todos modos por la respuesta.
kobame
1
@kobame, tal vez el punto de la pregunta y esta información adicional deberían haberse incluido en su pregunta original. La primera línea en su pregunta se refería a un script de larga ejecución. Supuse que no era interactivo, lo que condujo a la referencia a nohup.
ephsmith
@kobame, ¿alguna de estas respuestas resolvió tu problema?
ephsmith
8

Otra opción es pmset . Use el comando pmset noidle para evitar dormir mientras se pmsetestá ejecutando. Desafortunadamente, requiere una ventana de Terminal separada con pmsetejecución en ella. Sin embargo, la otra opción, caffeinatesolo le permite establecer un tiempo determinado . Por lo tanto, se trata de elegir si desea abrir una segunda sesión SSH o lidiar con una restricción de tiempo.

Editar: de acuerdo con el comentario de binarybob , en realidad puede ejecutarlo en segundo plano de esta manera: pmset noidle &para volver a pmsetescribir fg.

daviesgeek
fuente
También puede ejecutar pmseten segundo plano utilizando pmset noidle &y, por lo tanto, continuar utilizando el símbolo del sistema actual. Escriba fgpara pmsetvolver, en cuyo punto puede Ctrl + C
binarybob
@binarybob ¡Oh! No lo sabia. ¡Gracias por el consejo!
daviesgeek
@davisgeek: ¡realmente agradable! Gracias por la propina.
kobame
1
este también funciona en la notebook IPython: !pmset noidlemuy agradable cuando tienes una computadora de escritorio que sirve una notebook IPython y una laptop que se conecta de forma remota.
Jason S
1
Esto no funciona para mi. Se ejecuta con éxito, aparece el mensaje "Prevención de inactividad (^ C para salir) ...", pero aún se queda inactivo.
Iulian Onofrei
6
caffeinate -i -s /bin/ssh ...

Explicación:

-i - Prevenir el sueño inactivo.

-s- Evite la suspensión del sistema (completamente, incluso si cierra la tapa). Nota: solo funciona con corriente alterna.

/bin/ssh- Solo sigue escribiendo el comando que deseas ejecutar. Usar sshdirectamente en lugar de /bin/sshtambién debería funcionar.

Resultados: su sistema no dormirá mientras el sshcomando se esté ejecutando.

bogdansrc
fuente