¿Cómo evitar que atd ejecute trabajos anteriores?

9

¡At Daemon es una gran herramienta! Sin embargo, si un trabajo está programado para las 8:00 a.m. y la máquina está apagada en ese momento, ejecutará el trabajo cada vez que se arranque la máquina. Lo que me gustaría hacer es evitar que ejecute el trabajo si ha pasado el tiempo. He buscado en las páginas de manual y en línea, pero o no hay una respuesta o no pude encontrarla. Estoy usando Arch, pero que yo sepa es muy similar en todas las distribuciones.

¡Cualquier ayuda es muy apreciada!

Elmer
fuente

Respuestas:

7

¿Cuándo se convierte un trabajo en un trabajo pasado? Si enciende el sistema a las 7:59:50 y el atdemonio comienza a las 8:00:01, ¿debe ejecutarse el trabajo? ¿Qué pasa si el demonio comienza a las 7:59:59 pero tarda dos segundos en leer todos sus archivos?

¡Tú decides! Comience su trabajo con una verificación de tiempo y cancele si el tiempo ha pasado.

export execute_by_date=$(date +%s 'tomorrow 8:01')
at tomorrow 8:00
[ "$(date +%s)" -le "$execute_by_date" ] || exit
do_stuff
␄
Gilles 'SO- deja de ser malvado'
fuente
2

Podrías escribir un guión de inicio que cancele todos los trabajos programados en el apagado o reinicio.

No estoy seguro acerca de Arch-Linux, ¿hay /etc/sysconfig/atalgo o algo similar? Tal vez es solo un interruptor de configuración que debe voltear ...

Nils
fuente
Creo que esta es la mejor solución, vacíe la atcola en el arranque antes de atcomenzar.
bahamat
¡Esto es exactamente lo que espero sería / debería ser posible! Desafortunadamente, no hay ningún /etc/sysconfig/directorio en Arch ... Y ninguno de los archivos enumerados en las páginas del manual son archivos de configuración.
Elmer
@Elmer Acabo de buscar en Google un poco y leer sobre Arch Linux. '/etc/rc.d/atd' parece ser el guión de inicio para el at-daemon allí. Eche un vistazo allí si puede verlo analizando algún archivo de configuración. Si no tiene suerte, debe buscar su propio guión de inicio (p. Ej., Asígnele un nombre atcleary ejecútelo antes atd).
Nils
2

Mi voto es por el crondemonio.

Si necesita ejecutarlo en momentos específicos del día, pero no a la misma hora cada día, crearía un crontab con un rango de entrada por día con un tiempo de ejecución específico:

Algunos ejemplos tomados de crontab(5):

# run five minutes after midnight, every day
5 0 * * *       command
# run at 2:15pm on the first of every month
15 14 1 * *     command
# run at 10 pm on weekdays
0 22 * * 1-5    command
rpet
fuente
0

Lo que quieres es el demonio cron. Hace exactamente lo que quieres.

Alimenta tu motor de búsqueda favorito para cron daemon y tienes un montón de manuales e instrucciones. man cronY man crontabtambién es útil.

Marco
fuente
Gracias por la ayuda, pero cron no funciona para mi problema. Necesito ejecutar un script en momentos específicos del día, pero no a la misma hora cada día.
Elmer