¿Cuál es una manera simple de programar un evento único para que ocurra en algún momento en el futuro?

15

Muchas veces quiero que mi computadora haga una sola tarea, pero no ahora. Por ejemplo, podría hacer que me notifique en 30 minutos que es hora de dejar el trabajo. O tal vez quiero que realice una prueba complicada dentro de 2 horas cuando esté seguro de que la mayoría de los demás se habrán ido de la oficina.

Sé que podría crear un trabajo cron para ejecutarlo a una hora específica del día, pero eso parece mucho trabajo cuando todo lo que quiero es algo simple como "Ejecutar este script en 10 minutos", además tendría que averiguar a qué hora será en realidad X minutos / horas / días a partir de ahora, y luego elimine el trabajo cron una vez que haya terminado.

Por supuesto, podría escribir este script y ejecutarlo en segundo plano:

sleep X
do_task

Pero eso parece muy torpe: o necesito un nuevo script para cada tarea, o necesito escribir y mantener un script lo suficientemente genérico para hacer lo que quiero, sin mencionar que tengo que calcular cuántos segundos hay en los minutos, horas o días que quiero.

¿No hay una solución ya establecida para este problema?

Cory Klein
fuente
77
Supongo que no ha ejecutado a través de todavía?
jw013
esto puede parecer muy básico ... pero ¿su sistema no tiene ningún tipo de calendario / lista de tareas pendientes con advertencias?
JoséNunoFerreira

Respuestas:

27

Yo uso un script simple con at:

#!/bin/bash
# email reminder notes using at(1)...

read -p "Time of message? [HH:MM] " time
read -p "Date of message? [dd.mm.yy] " date
read -p "Message body? " message

at "$time" "$date" <<EOF
echo "$message" | mailx -s "REMINDER" [email protected]
EOF

Usted podría fácilmente tubería del $messagea notify-sendo dzensi quería una notificación de escritorio en lugar de un correo electrónico.

jasonwryan
fuente
99
También puede usar el tiempo relativo ( + 2 days) y diferentes formatos ( YYYY-MM-DD). Consulte la página de manual para más detalles.
Arcege
Sí: nosotros los antipodeanos preferimos DD-MM-AA :)
jasonwryan
Usualmente usamos para guiones rápidos. Mi manera perezosa favorita de programar un trabajo es "ahora +5 minutos", que también pueden ser horas o días.
George M
+1 para el guión y para mencionar dzen y notificar-enviar del que no había oído hablar.
Joe
La redirección dzen no está funcionando para mí. unix.stackexchange.com/q/38362/4143
Cory Klein
6

La forma genérica de usar ates

Escribe un guión que haga lo que quieres hacer. Utilice la ruta completa para todos los comandos externos, registre la salida en un archivo de registro adecuado o envíelo por correo.

Prueba el guión.

Activalo con at -f YOURSCRIPT -t MMDDhhmm

Nils
fuente