¿Cómo puedo hibernar / suspender desde la línea de comandos y hacerlo en un momento específico?

Respuestas:

43

Puede usar el atcomando para programar cualquier acción, incluida la ejecución de los comandos detallados en esa pregunta .

Por ejemplo, si quieres hibernar en 30 minutos:

echo 'pmi action hibernate' | at now + 30 min

O si desea suspender a las 11:00 pm:

echo 'pmi action suspend' | at 11pm

Si necesita ejecutar un comando como root, ejecute aten sudolugar del comando en sí sudo(ya sudoque solo debe ejecutarse de forma interactiva, a menos que lo haya configurado para que no solicite su contraseña). Por ejemplo, los equivalentes de los comandos anteriores que usan pm-hibernatey pm-suspendson:

echo pm-hibernate | sudo at now + 30 min

echo pm-suspend | sudo at 11pm

Eliah Kagan
fuente
Gracias por entender que se pidieron ambas situaciones ... Edité el título para reflejar esto también. Modifiqué mi respuesta para incluir ambas situaciones ahora.
cprofitt
¿Alguna idea de cómo puedo eliminar los trabajos?
KhoPhi
2
@Rexford El atrmcomando elimina los trabajos creados por at.
Eliah Kagan
9

Para una especificación relativa (por ejemplo, "después de 30 minutos"), simplemente puede usar el sleepcomando para hacer que el comando de suspensión / hibernación espere.


Ejemplos:

Espere 30 minutos, luego suspenda:

sudo sleep 30m; sudo pm-suspend

Espere 1 hora, luego hiberne:

sudo sleep 1h; sudo pm-hibernate
Eenoku
fuente
También me gusta este enfoque.
KhoPhi
2
Después de 1 hora, pm-hibernatedesea una contraseña para root nuevamente y la suspensión no sucede.
Vitaly Zdanevich
¿Qué hay de iniciar sesión como root para evitar que se le solicite una contraseña?
banan3'14
4

Para horas específicas repetidas, como apagar las computadoras, hay una hora específica cada día. usa cron.

crontab -e

agregue lo siguiente:

15 14 1 * * pmi action suspend

Si quieres personalizarlo.

* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

Para un trabajo de una sola vez, nosotros en el comando

Por ejemplo, si quieres hibernar en 30 minutos:

echo 'pmi action hibernate' | at now + 30 min

O si desea suspender a las 11:00 pm:

echo 'pmi action suspend' | at 11pm
cprofitt
fuente
2
El uso crones una buena solución cuando el objetivo es suspender o hibernar a una hora específica del día, o una hora específica en un día específico de la semana, mes o año. Pero para programar una sola suspensión o hibernación, que parece ser lo que Ederico estaba preguntando (y que es algo que tiene mucho más sentido querer hacer), se atdebe usar el comando. (Puede programar un solo evento cronhaciendo que el evento edite el crontab relevante, por ejemplo usando sedo awk, pero eso es extremadamente complejo e innecesario; use at.)
Eliah Kagan
No se ajusta a los términos relativos solicitados por la pregunta, solo es útil para horarios específicos.
Bruno Pereira el
Sí, este fue un ejemplo para el "tiempo específico" que se solicitó. "Sin embargo, me gustaría saber cómo usar la línea de comando para suspender / hibernar en un momento dado, en absoluto (ejemplo, 11PM)"
cprofitt
1
Has editado tu respuesta para agregar información sobre cómo usarla at, pero desafortunadamente la información que has agregado no es correcta. El <operador redirige el texto del archivo o dispositivo especificado a su derecha a la entrada estándar para el comando especificado a su izquierda. Si desea utilizar en <lugar de |(como en mi respuesta ), tendría que hacer un archivo con pmi action suspend(o pmi action hibernate) como su contenido. Tal complejidad |mejora aquí.
Eliah Kagan
Como pauta general, cuando tiene un catcomando a la izquierda de un |(por ejemplo cat foo | bar), puede reemplazarlo con una <expresión ( bar < foo). Pero cuando tiene un echocomando a la izquierda de a |, eso no se puede reemplazar trivialmente con una <expresión.
Eliah Kagan