¿Cómo cerrar Linux en una fecha y hora específica desde la terminal?

46

Parece que puedo apagar usando sudo shutdownespecificando un tiempo o minutos.

¿Hay alguna manera de especificar fecha y hora para el apagado?

Askar
fuente

Respuestas:

78

Puede hacer esto directamente desde shutdown command, ver man shutdown:

SYNOPSIS
   /sbin/shutdown [-akrhPHfFnc] [-t sec] time [warning message]

[...]

   time   When to shutdown.

Así por ejemplo:

shutdown -h 21:45

Eso se ejecutará shutdown -ha las 21:45.


Para los comandos que no ofrecen esta funcionalidad, puede probar uno de:

A. Utilizando en

El atdemonio está diseñado precisamente para esto. Dependiendo de su sistema operativo, es posible que deba instalarlo. En sistemas basados ​​en Debian, esto se puede hacer con:

sudo apt-get install at

Hay tres formas de dar un comando a at:

  1. Tubería:

    $ echo "ls > a.txt" | at now + 1 min
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  2. Guarde el comando que desea ejecutar en un archivo de texto y luego pase ese archivo a at:

    $ echo "ls > a.txt" > cmd.txt
    $ at now + 1 min < cmd.txt
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  3. También puede pasar atcomandos desde STDIN:

    $ at now + 1 min
    warning: commands will be executed using /bin/sh
    at> ls
    

    Luego, presione CtrlDpara salir del atcaparazón. El lscomando se ejecutará en un minuto.

Puede dar tiempos muy precisos en el formato de [[CC]YY]MMDDhhmm[.ss], como en

$ at -t 201403142134.12 < script.sh

Esto ejecutará el script script.sha las 21:34 y 12 segundos el 14 de marzo de 2014.

B. Usando cron (aunque esta no es una buena idea para apagar)

El otro enfoque es utilizar el cronplanificador, que está diseñado para realizar tareas en momentos específicos. Por lo general, se usa para tareas que se repetirán, pero también puede dar un tiempo específico. Cada usuario tiene sus propios "crontabs" que controlan qué trabajos se ejecutan y cuándo. El formato general de un crontab es:

*     *     *     *     *  command to be executed
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- day of week (0 - 6) (Sunday=0)
|     |     |     +------- month (1 - 12)
|     |     +--------- day of month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)

Entonces, por ejemplo, esto se ejecutará lstodos los días a las 14:04:

04 14 * * * ls

Para configurar un cronjob para una fecha específica:

  1. Cree un nuevo crontab ejecutando crontab -e. Esto abrirá una ventana de su editor de texto favorito.

  2. Agregue esta línea al archivo que acaba de abrir. Este ejemplo en particular se ejecutará a las 14:34 del 15 de marzo de 2014 si ese día es un viernes (entonces, OK, podría ejecutarse más de una vez):

    34 14 15 5  /path/to/command        
    
  3. Guarde el archivo y salga del editor.

Esta respuesta SO sugiere una forma de ejecutarlo solo una vez, pero nunca lo he usado, por lo que no puedo garantizarlo.

terdon
fuente
2
Programar un apagado con cron es un mal hábito. De repente, se preguntará por qué el servidor está caído todos los lunes por la mañana.
Ouki
44
@Ouki Lo siento, pero no veo dónde recomiendo usar cron para el apagado. Menciono entre paréntesis que es posible (lo es) pero no lo recomiendo. Aquí tendemos a que nos gusten las respuestas completas, por eso ofrecí las otras alternativas sin sugerir que deberían usarse shutdown. Sin embargo, siento esa mala experiencia, que no podría haber sido agradable.
terdon
2
Esto se trata más de sugerencias, ya que está combinando la shutdownprogramación y cronen la misma respuesta ... Ya sea que se trate de una estación de trabajo o un servidor de correo de 1000 usuarios (mi triste experiencia) se trata más de las consecuencias de un mal hábito.
Ouki
3
Estoy con Ouki aquí. Al discutir shutdown, uno no debe incluir cron. (especialmente con alguien que no sabrá por qué es una idea horrible.)
Ricky Beam
2
Estoy un poco confundido porque esta respuesta parece conducir con información ya asumida por la pregunta. Parece que el OP sabe cómo especificar una hora de apagado, pero quiere saber cómo especificar una fecha y una hora. Eso se aborda en esta respuesta, pero se proporciona como si fuera información adicional, cuando es lo que se solicitó en primer lugar.
Weeble
24

No, no puede especificar una fecha en el comando de apagado, pero existen dos alternativas:

1) Lo más fácil es usar el comando at . El siguiente ejemplo se ejecutará shutdown +5a una hora y día específicos:

echo "shutdown +5" | at 10:05am 2019-01-19

2) si no le importa usar su calculadora y desea apagarla en 24 horas (24 * 60 = 1440 minutos) y está absolutamente seguro de que el sistema no se reiniciará entre:

shutdown -r +1440
ndemou
fuente
2
La razón de mi respuesta anterior: la respuesta de terdon es correcta y muy comprensiva pero demasiado habladora (en mi humilde opinión al menos)
ndemou
2
Si por hablador quieres decir útil e integral ... Tu respuesta ni siquiera explicó el atcomando.
Anthony
@ Anthony Creo que esta forma de usar atno merece ninguna explicación. Puedo verte creer lo contrario. Mentes diferentes, puntos de vista diferentes.
ndemou
Esta respuesta ya no es cierta. Los comandos van Smoorenburg, Upstart y systemd shutdownno permiten una especificación de fecha. Pero el conjunto de herramientas nosh es shutdowncompatible con la sintaxis BSD de larga data.
JdeBP
@JdeBP: ¿qué alternativa de las dos crees que ya no es verdad y has probado y verificado que no lo son? Acabo de probar ambos comandos en 3 sistemas (Ubuntu 18.04,16.04 y CentOS 7) y funcionaron bien. Con respecto al resto de su comentario ("The van Smoorenburg ..."), no estoy seguro de si es una aclaración de su afirmación de que esta respuesta ya no es verdadera o un comentario general. Tal vez deberías publicar una respuesta con un poco más de información.
ndemou
6

Apagará su sistema a las 12:00:

$ sudo shutdown -h 12:00

Opciones:

-h, -P, --poweroff

Apague la máquina.

-r, --reboot

Reinicia la máquina.

-c

Cancelar un cierre pendiente.

Hamed Kamrava
fuente
55
Su método no muestra cómo cerrar en una fecha específica ...
Askar