¿Cómo apagar la computadora después de completar una tarea?


25

Generalmente comienzo una descarga antes de ir a la escuela.
¿Qué comando debo usar para hacer automáticamente los guardados necesarios y apagar la computadora después de que se haya completado una tarea en particular?
(Digamos, después de instalar las actualizaciones o después de descargar un archivo grande).

También he publicado en askubuntu .

Respuestas:


25

Depende de que empezaste la tarea. Si se trata de una herramienta de línea de comandos, simplemente puede ejecutar halto shutdown -h now:

  1. wget http://..../somelargefile; halt- haltse ejecutará despuéswget

  2. wget http://..../somelargefile && halt- haltse ejecutará si wgetno devuelve ningún error

  3. wget http://..../somelargefile || halt- haltse ejecutará si wgetdevuelve errores

Alternativa a esto es usar kshutdown: en esta aplicación puede especificar qué acción se debe hacer (reiniciar / apagar / hibernar / etc. o ejecución del comando) y cuándo (después de un tiempo o cuando sale de otra aplicación). Si desea utilizar esta herramienta, debe elegir el proceso correcto: algunas utilidades de actualización inician pocos subprocesos.

KShutdown


44
También puedes dar shutdownun tiempo para esperar; no es necesario usar kshutdown para ese propósito.
Cascabel

1
No, pero shutdownno tiene forma de esperar un evento real.
Shadur

18

Cada proceso tiene un directorio nombrado de acuerdo con su id de proceso (pid) en el procsistema de archivos. Por lo tanto, puede esperar la finalización de un proceso específico comprobando si su directorio existe repetidamente.

Puede usar esto para realizar un apagado del sistema después de la finalización del proceso de esta manera (reemplace 2296 por el pid para esperar):

su -c 'while [[ -d /proc/2296 ]]; do sleep 1; done; poweroff'

Ventajas:

  • Puede decidir si se apaga o no después de activar el comando de shell
  • El apagado se emite como root, el comando para esperar no se realiza necesariamente como root (no es necesario solucionar el sudoindicador de contraseña tardía ).

Desventajas

  • Puede suceder que su proceso finalice y el SO reutilice el mismo pid para un proceso recién generado dentro de ese segundo (condición de carrera). Por lo tanto, continuará esperando a que termine ese nuevo proceso.

2
Punto principal: Esto funciona incluso si el proceso ha comenzado.
Heisenberg

Si ha comenzado algo desde un terminal que todavía tiene abierto psen ese mismo terminal, debería ayudarlo a detectar el PID para el CMD. Si el proceso estaba / está en otro terminal, la salida ps para todo a través de grep para filtrar su comando debería ayudarlo a encontrarlops -elf | grep <command_related_word>
TafT

Mejor revise mi respuesta en base a pgrepaka grep proceso ...
Gilles Quenot

¿Cómo puedo poner este comando en segundo plano?
DerWeh

1
@DerWeh Envuélvelo en un script de shell y sigue los pasos que se indican aquí: stackoverflow.com/q/625409/1025391
moooeeeep

3

Puede usar los operadores &&y ||para encadenar comandos juntos. Por ejemplo:

apt-get update && sleep 2 && init 0

que realizará una actualización del sistema utilizando aptitude, esperará 2 segundos e irá al nivel de ejecución 0, dependiendo de su sistema, esto puede o no apagar el hardware.

Para hablar con una o más operaciones después de una operación más arbitraria, como un presumiblemente navegador web, la descarga requerirá una lógica adicional para ver el archivo de descarga para verificar que la descarga se haya completado, sin embargo, la lógica del shell no ha cambiado.


3

Si desea monitorear un proceso ya iniciado, puede hacerlo en un :

# while pgrep &>/dev/null -f process_name; do sleep 60; done; shutdown -h now

1

Hay una aplicación, llamada sentinella, que puede hacerlo por usted con su GUI: sentinella

para instalarlo:

sudo aptitude update
sudo aptitude install sentinella
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.