parando o trabalho atd no tempo especificado

3

Estou tentando agendar o download à noite. Eu criei um trabalho atd que inicia o script de download às 2:00. Agora eu quero parar o mesmo trabalho às 7 da manhã, se ainda estiver funcionando. O que estou fazendo agora é apenas shutdown -h 7:00 . É possível interromper o trabalho atd no tempo especificado?

    
por Majid Azimi 10.10.2013 / 21:47

3 respostas

2

Não vejo um mecanismo dentro de at para permitir que você especifique um horário de término. Eu apenas agendaria outro trabalho at às 7h que verificaria se algum desses trabalhos ainda estava em execução e os mataria.

    
por 10.10.2013 / 22:12
2

At jobs são executados usando um interpretador de shell (no Linux, geralmente é /bin/sh ). Isso significa que qualquer comando que você executar como at job poderá ser rastreado por um número PID do shell que executará esse comando. Você pode simplesmente capturar este 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 de 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 trabalho at , você pode matar o trabalho e todos os 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
    
por 10.10.2013 / 22:58
1

Você pode incorporar o tempo limite no seu trabalho.

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

Como alternativa, peça ao seu trabalho para escrever seu ID de processo em algum lugar para que você possa eliminá-lo. No trabalho das 2 da manhã:

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
    
por 11.10.2013 / 02:13

Tags