parando o trabalho atd em um horário especificado

parando o trabalho atd em um horário especificado

Estou tentando agendar o download à noite. Eu criei um atdtrabalho que inicia o script de download às 2h. Agora quero interromper o mesmo trabalho às 7h, se ele ainda estiver em execução. O que estou fazendo agora é apenas shutdown -h 7:00. É possível interromper atdo trabalho em um horário especificado?

Responder1

Não vejo um mecanismo atque permita especificar um horário de parada. Eu apenas agendaria outro attrabalho às 7h para verificar se algum desses trabalhos ainda está em execução e matá-los.

Responder2

Atos trabalhos são executados usando um interpretador de shell (no Linux, geralmente é /bin/sh). Isso significa que qualquer comando que você executar como attrabalho pode ser rastreado por um número PID do shell que executará esse comando. Você pode simplesmente capturar esse PID com uma variável de shell especial $$. Você pode salvá-lo em um arquivo (aspas simples são obrigatórias para não expandi-lo no shell da sessão atual):

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

e mais tarde, em outro attrabalho, você pode encerrar o trabalho e todos os seus processos filhos gerados ( 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

Responder3

Você pode incorporar o tempo limite em seu trabalho.

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

Como alternativa, faça com que seu trabalho escreva o ID do processo em algum lugar para que você possa eliminá-lo. No trabalho das 2h:

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

No trabalho das 7h:

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

informação relacionada