Posso fazer o cron “aleatório”?

12

Talvez eu seja completamente maluco e, em caso afirmativo, tudo bem. Mas como eu agendaria um trabalho para um cronograma aleatório, transmitir uma mensagem boba, como de fortune ?

esclarecimento
sim - esta é minha estação de trabalho pessoal - não planejando fazer algo instável em um servidor de produção:)

    
por warren 17.09.2009 / 05:32

4 respostas

12

at tem uma interface mais simples para esse tipo de finalidade se at estiver instalado, a máquina estiver executando atd e o usuário tiver permissão para usar o comando.

Por exemplo (verifique a sintaxe exata usando man at ou info at ),

at -f file now + 53 minutes

ou

at -f file now + 2 hours

executará os comandos no arquivo especificado em 53 minutos ou 2 horas, respectivamente.

at pode então ser executado novamente no início do trabalho agendado com unidades de início, contagem e tempo adequadas (aleatórias ou não).

Editar

Como Arjan aponta de maneira útil abaixo, se você estiver usando isso para outra coisa que não seja um aplicativo de brinquedo, é necessário pensar em questões como o que acontece

  1. se a próxima execução começar antes do término anterior (por exemplo, o re-entrante do script?) ou

  2. se uma execução não for concluída corretamente ou

  3. se a próxima execução não começar de todo ou no horário (por exemplo, o que acontece se a máquina estiver desligada quando a próxima execução estiver prestes a começar) e

  4. sobre o registro e o relatório de execuções com falha ou com êxito.

por 17.09.2009 / 09:37
13

Eu tenho muitos comandos em / etc / crontab fazendo todos os tipos de coisas e alguns precisam de precisão em segundos. Agora, o cron pode ter uma resolução mais precisa, mantendo todos os tempos visíveis e centralizados.

Este exemplo obtém e analisa uma página da web entre 10 e 50 segundos antes de cada 5 minutos:

4-59/5 * * * * root (sleep $(($RANDOM\%40+10))) && /etc/munin/plugins/someplugin prefetch

Ele não precisa ter um horário exato, pois os dados são lentos, mas ajuda a manter o tempo de execução do nó da munição o mais baixo possível, por não ter que esperar por páginas da Web. (O plug-in ainda armazena em cache a página por 30 minutos para reduzir ocorrências desnecessárias, mas precisa atualizar um banco de dados a cada 5 minutos).

Observe que o \% - cron substitui% para "\ n" - útil para manter o texto do e-mail em uma linha.

    
por 24.12.2011 / 09:09
6

Internamente para cron , não acredito que esse recurso exista. Acho que a melhor solução seria colocar seu comando em um script de shell e colocar um sleep interval aleatório na parte superior do script e usar a variável $RANDOM . Em seguida, execute o script uma vez por dia em uma tarefa normal do cron.

#!/bin/bash
sleep $(($RANDOM%5))
/path/to/command -param1 -param2
    
por 17.09.2009 / 05:39
6

Dependerá do tipo de intervalo que você está procurando. mas vamos supor que você gostaria que o script fosse executado aleatoriamente com uma probabilidade de 1:30 (uma vez a cada 30 minutos)

  • Construa seu script cron para uma peridiocidade de, digamos, 10 minutos. Ele irá disparar 3 vezes a cada 30 minutos.

  • Dentro do script use rand como a condição para uma instrução if . Você deseja que rand retorne um número entre 0 e 2. Se for 0, execute o conteúdo da instrução if.

Essencialmente, seu script sempre é acionado em um intervalo definido. Mas só irá executar o comando que você está interessado aleatoriamente. Seu provedor de serviços agradecerá a você.

    
por 17.09.2009 / 05:57

Tags