detener el trabajo atd en un momento específico

detener el trabajo atd en un momento específico

Estoy intentando programar la descarga por las noches. He creado un atdtrabajo que inicia la descarga del script a las 2 a.m. Ahora quiero detener el mismo trabajo a las 7 a.m. si todavía está ejecutándose. Lo que estoy haciendo ahora es simplemente shutdown -h 7:00... ¿Es posible detener atdel trabajo en un momento específico?

Respuesta1

No veo un mecanismo interno atque le permita especificar una hora de parada. Simplemente programaría otro attrabajo a las 7 a.m. que verificaría si alguno de estos trabajos todavía se está ejecutando y los eliminaría.

Respuesta2

AtLos trabajos se ejecutan utilizando un intérprete de shell (en Linux, normalmente es /bin/sh). Significa que cualquier comando que vaya a ejecutar como attrabajo puede ser rastreado mediante un número PID del shell que ejecutará ese comando. Simplemente puede capturar este PID con una variable de shell especial $$. Puede guardarlo en un archivo (las comillas simples son obligatorias para no expandirlo en su shell de sesión actual):

at 'echo $$ > /var/run/my_at_job.pid; your_command; rm /var/run/my_at_jon.pid' | at TIME_SPEC

y luego, en otro attrabajo, puede finalizar el trabajo y todos sus procesos secundarios generados ( you_command):

if [ -r /var/run/at_job.pid ]; then
  for PID in $(ps --ppid `cat /var/run/at_job.pid` -o pid | sed -e '1d'); do
    kill $PID
  done
fi

Respuesta3

Podrías incorporar el tiempo de espera en tu trabajo.

timeout "$(($(date +%s -d '7am') - $(date +%s)))" wget -c http://example.com/wibble

Alternativamente, haga que su trabajo escriba su ID de proceso en algún lugar para poder eliminarlo. En el trabajo de las 2 am:

echo $$ >~/.at.download.pid
wget -c http://example.com/wibble
rm ~/.at.download.pid

En el trabajo de las 7 am:

if [ -e ~/.at.download.pid ]; then
  kill $(~/.at.download.pid)
  rm ~/.at.download.pid
fi

información relacionada