apagado en una fecha específica

11

Sé que puede programar un apagado para un tiempo específico a través de shutdown -h 21:45y que no debe usar crontabs para tales cosas debido a su naturaleza repetitiva. ¿Cómo puedo programar un cierre para una fecha específica como el 31 de agosto a las 20:00 p.m.?

Carga de HdM
fuente

Respuestas:

7

Las versiones recientes de Ubuntu usan systemd y cuando el programador convencional atdy asociado atpara comandos únicos no está instalado o no se ejecuta, se puede programar un comando único con losystemd-run que es algo más fácil que generar manualmente un systemd timer:

 systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now
HBruijn
fuente
2
La ironía es que comenzar un servicio completo para hacer esto es casi superfluo. El mecanismo de apagado de systemd mismo admite puntos arbitrarios en el tiempo. Su herramienta de línea de comandos simplemente no proporciona la capacidad de acceder a esto, porque no está a la altura de la línea de comandos del BSD shutdown. Como escribí en otra respuesta, ustedes que quieran esto podrían tratar de persuadir a las personas del sistema para que hagan que su shutdownherramienta sea más capaz, con una sintaxis de décadas de antigüedad, en lugar de andar por las casas systemd-run.
JdeBP
Obtengo especificaciones de calendario no válidas: 2019-08-31 20:00:00 CET
HdM Upload
12

El atcomando es para programar una ejecución futura.

p.ej

% at 8pm Aug 31
at> echo hello
at> <EOT>
job 161 at Sat Aug 31 20:00:00 2019

(el "<EOT>" se produjo presionando control-D)

% atq
161     Sat Aug 31 20:00:00 2019 a sweh

Puedes poner tu shutdowncomando aquí.

Stephen Harris
fuente
¡Si! Me había olvidado atcuando publiqué, atdefinitivamente está destinado a esto en general, aunque en una empresa el método aceptado puede ser ato cron, según las convenciones relacionadas con la gestión / implementación de la configuración.
flow2k
No es exactamente equivalente, tenga en cuenta. unix.stackexchange.com/q/465322/5132
JdeBP
atTambién es capaz de tomar órdenes de un tubo: echo "echo yup > $(tty)" | at now.
mosvy
7

Si bien ates la forma obvia de hacer esto, creo que sobrevivirá a los apagados, por lo que si la máquina se reinicia antes del apagado programado, podría apagarse nuevamente a la hora programada. Por lo tanto, usando bash y GNU date podemos usar un apagado retrasado.

/sbin/shutdown +$(( ( $( date -d "30 may 2019 13:15" +%s ) - $( date +%s ) ) / 60 + 1 ))

NB: Esto solo es preciso hasta un minuto. Funciona convirtiendo el tiempo programado, y ahora a segundos desde la época de UNIX, calculando la diferencia, convirtiendo a minutos y luego usándolo como el retraso para el apagado. No funcionará correctamente si la hora programada es pasada.

CSM
fuente
3

Usas un mejor shutdowncomando.

Los comandos van Smoorenburg, Upstart y systemd shutdownno permiten una especificación de fecha. Pero el shutdowncomando BSD toma un valor de fecha en su especificación de cuándo cerrar, en el formulario yymmddhhmm. Este ha sido el caso desde 4BSD, y lo sigue siendo con FreeBSD y OpenBSD. NetBSD lo extendió a ccyymmddhhmm.

Debido a que el conjunto de herramientas nosh también se puede usar en los BSD, le di a mi shutdowncomando la misma capacidad, extendiéndolo a CCYYMMDDHHMMNetBSD. Y debido a que el conjunto de herramientas nosh también se puede usar en Linux, eso le da a Linux un comando de apagado que toma fechas.

Por supuesto, funciona con la nariz system-manager. También funciona con algunos otros sistemas. Envía señales al proceso n. ° 1 para promulgar cosas y algunos otros administradores de sistemas entienden las mismas señales, por ejemplo systemd, que también se pueden apagar al usarlo.

Podrías usarlo, o una herramienta como esta; o podría tratar de persuadir a los autores de otros shutdownprogramas de Linux para que extiendan sus herramientas para que sean tan capaces como el BSD shutdown.

Otras lecturas

  • Jonathan de Boyne Pollard (2018). shutdown. páginas del manual de nosh toolset. Softwares
  • Jonathan de Boyne Pollard (2018). system-manager. páginas del manual de nosh toolset. Softwares
  • shutdown. Manual del administrador del sistema . Páginas del manual de NetBSD. 2011-11-04.
  • shutdown. Manual del administrador del sistema FreeBSD . 2018-01-01.
  • shutdown. Páginas del manual de OpenBSD. 2015-01-21.
  • /unix//a/465337/5132
JdeBP
fuente
1

Para ejecutar el trabajo solo este año:

0 20 31 8 * test $(/bin/date +\%Y) = "2019" && /sbin/shutdown now

Para ejecutar el trabajo todos los años:

0 20 31 8 * /sbin/shutdown now
Freddy
fuente
-4

Puede haber una opción para ingresar el año al shutdowncomando, pero cron se puede usar para ejecutar comandos solo una vez en un momento específico. Para su ejemplo, intente

0 0 31 8 ? 2019  shutdown

Cuidado: lo anterior no es la sintaxis cron estándar.

flow2k
fuente
2
1. Esto no dice 20:00 pm, dice medianoche. 2. Nunca he visto un cronjob con SIX campos para el momento. ¿A qué implementación cron hace referencia?
Comodín
2
No hay un yearcampo en el crontabcalendario
Seamus
Después me di cuenta de que esta sintaxis no es "cron estándar", por lo que estoy de acuerdo, no debe tomarse al pie de la letra. OP parece implicar que hay una penalización de rendimiento asociada con el uso de cron, por lo que en mi respuesta, traté de aclarar: no hay ninguna inherentemente ineficiente sobre la implementación de cron que la haga inadecuada para una tarea única. ¿Es esto lo que piensas también?
flow2k