Agendando tarefas no cron com horário aleatório

Publicado por Fábio Berbert de Paula em 23/03/2023

[ Hits: 1.424 ]

Blog: https://fabio.automatizando.dev

 


Agendando tarefas no cron com horário aleatório



Se você deseja executar uma tarefa no cron em um horário aleatório dentro de um intervalo específico, siga os passos abaixo:
  1. Crie um script para executar antes do comando desejado e inclua um atraso aleatório antes de sua execução.
  2. Configure o cron para executar esse script no início do intervalo desejado.

Por exemplo, se você deseja executar um comando entre 8:30 e 9:30, crie um script chamado "random_command.sh":

#!/bin/bash

# Gere um atraso aleatório entre 0 e 3600 segundos (1 hora)
DELAY=$((RANDOM % 3600))

# Aguarde o tempo gerado aleatoriamente antes de executar o comando
sleep $DELAY

Em seguida, torne o script executável:

chmod +x /path/to/random_command.sh

Agora, atualize sua entrada no cron. Por exemplo, todos os dias às 8:30 eu envio uma mensagem de bom dia para minha namorada via WhatsApp pegando uma frase aleatório gerada por inteligência artificial. Mas como a mensagem vinha sempre no mesmo horário, ela começou a desconfiar:

30 8 * * * /home/fabio/bin/adb-reload s22 && FRASE=$(/home/fabio/bin/bomdia 1) && /home/fabio/bin/zapear Namorada ${FRASE}

Então, eu atualizei a entrada no cron para:

30 8 * * * /home/fabio/bin/random_command.sh && /home/fabio/bin/adb-reload s22 && FRASE=$(/home/fabio/bin/bomdia 1) && /home/fabio/bin/zapear Namorada ${FRASE}

Com esta configuração, o script "random_command.sh" será executado às 8:30 todos os dias, e o comando original será executado após um atraso aleatório de 0 a 3600 segundos (0 a 1 hora), ou seja, em algum momento entre 8:30 e 9:30.

Pronto! Agora você tem uma tarefa no cron que será executada em um horário aleatório dentro do intervalo especificado.

Também é possível adaptar o random_command.sh para gerar um delay de acordo com um valor informado por parâmetro ao invés de 1 hora fixo. Altere o código do script para o a seguir:

#!/bin/bash

MINUTES=$1

# Se minutos não foi informado, use 60 minutos como padrão
if [ -z "$MINUTES" ]; then
    MINUTES=60
fi

# Gere um atraso aleatório entre 0 e o valor em minutos 
# informado por parâmetro
DELAY=$((RANDOM % ($MINUTES * 60)))

# Aguarde o tempo gerado aleatoriamente antes de executar o comando
sleep $DELAY

Agora basta informar o valor em minutos como parâmetro ao script:

30 8 * * * /home/fabio/bin/random_command.sh 30 && /home/fabio/bin/adb-reload s22 && FRASE=$(/home/fabio/bin/bomdia 1) && /home/fabio/bin/zapear Namorada ${FRASE}

No exemplo acima o comando será executado em algum momento entre 8:30 e 9:00 (30 minutos).

Até a próxima!

Outras dicas deste autor

Opera - erro ao reproduzir vídeos da Udemy, Facebook, Twitter [Resolvido]

Gimp - Erro: Execution error for 'Screenshot' [Resolvido]

Como omitir/filtrar mensagens inúteis no log (rsyslogd)

Vim - fazer JOIN de múltiplas linhas

Como restaurar as cores do terminal

Leitura recomendada

Conflito na tecla F10 para sair do MC (midnight commander) dentro do Gnome

Listando os últimos comandos executados no bash

Como tirar print de sua tela de login, bloqueio, apresentação e área de trabalho (KDE)

Alterar timezone no Slackware

Colocar arquivos mostrados por um comando em um pacote .tar no Linux

  

Comentários
[1] Comentário enviado por maurixnovatrento em 25/03/2023 - 17:50h


boa dica.

___________________________________________________________
Conhecimento não se Leva para o Túmulo.
https://github.com/mxnt10



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts