
Sé que puedes programar un apagado para un tiempo específico shutdown -h 21:45
y que no deberías usar crontabs para tales cosas debido a su naturaleza repetitiva. ¿Cómo puedo programar un apagado para un sistema específico?fecha¿Como el 31 de agosto a las 20:00 h?
Respuesta1
El at
comando sirve para programar ejecuciones futuras únicas.
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 shutdown
comando aquí.
Respuesta2
Si bien at
es 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, es posible que se apague 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 sólo tiene una precisión de un minuto. Funciona convirtiendo la hora programada, y ahora a segundos desde la época de UNIX, calculando la diferencia, convirtiéndola a minutos y luego usando esto como retraso para apagar. No funcionará correctamente si la hora programada ya pasó.
Respuesta3
Las versiones recientes de Ubuntu usan systemd y cuando el programador convencional atd
y asociado at
para comandos únicos no está instalado o no se está ejecutandose puede programar un comando único consystemd-run
que es algo más fácil que generar manualmente unsystemd timer
:
systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now
Respuesta4
Para ejecutar el trabajo sólo este año:
0 20 31 8 * test $(/bin/date +\%Y) = "2019" && /sbin/shutdown now
Para ejecutar el trabajo cada año:
0 20 31 8 * /sbin/shutdown now