Como impedir que o atd execute trabalhos anteriores?

9

O at daemon é uma ótima ferramenta! No entanto, se um trabalho estiver agendado para as 8:00 e a máquina estiver desligada nesse momento, ele executará o trabalho sempre que a máquina for inicializada. O que eu gostaria de fazer é impedi-lo de executar o trabalho se o tempo já passou. Pesquisei as páginas de manual e on-line, mas ou não há uma resposta ou não consegui encontrar uma. Estou usando o Arch, mas, tanto quanto sei, é muito semelhante entre distribuições.

Qualquer ajuda é muito apreciada!

Elmer
fonte

Respostas:

7

Quando um trabalho se torna um trabalho passado? Se você ligar o sistema às 7:59:50 e o atdaemon iniciar às 8:00:01, o trabalho deve ser executado? E se o daemon iniciar às 7:59:59, mas demorar dois segundos para ler todos os seus arquivos?

Você decide! Comece seu trabalho com uma verificação de horário e aborte se o tempo já passou.

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

Você pode escrever um script init que cancela todas as tarefas agendadas no desligamento ou reinicialização.

Não tenho certeza sobre o Arch-Linux - existe /etc/sysconfig/atalgo parecido? Talvez seja apenas um switch de configuração que você precisa virar ...

Nils
fonte
Eu acho que essa é a melhor solução, limpe a atfila na inicialização antes de atiniciar.
22412 bahamat
É exatamente isso que eu espero que seria / deveria ser possível! Infelizmente não há /etc/sysconfig/diretório no Arch ... E nenhum dos arquivos listados nas páginas de manual são arquivos de configuração.
Elmer
@ Elmer Acabei de pesquisar um pouco no Google e ler sobre o arch linux. '/etc/rc.d/atd' parece ser o script init para o at-daemon lá. Dê uma olhada lá se você pode vê-lo analisando algum arquivo de configuração. Se você não tiver sorte lá, terá que usar seu próprio script de inicialização (por exemplo, nomeie-o atcleare execute-o antes atd).
Nils
2

Meu voto é para o crondaemon.

Se você precisar executá-lo em horários específicos do dia, mas não no mesmo horário todos os dias, eu criaria um crontab com um intervalo de entradas por dia e um tempo de execução específico:

Alguns exemplos extraídos 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
fonte
0

O que você deseja é o daemon cron. Faz exatamente o que você quer.

Alimente seu mecanismo de pesquisa favorito para o cron daemon e você terá vários manuais e instruções. man crone man crontabtambém é útil.

Marco
fonte
Obrigado pela ajuda, mas o cron não funciona para o meu problema. Eu preciso de um script executado em horários específicos do dia, mas não no mesmo horário todos os dias.
Elmer