Agendando tarefas no cron com horário aleatório

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

[ Hits: 1.784 ]

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

PHP: Substituindo somente a primeira ocorrência de uma palavra na string

Verificar bateria do mouse bluetooth via linha de comando

Como remover arquitetura i386 no Debian/Ubuntu e derivados

PHP - Como comparar duas strings case insensitive

Como Instalar as Fontes TrueType da Microsoft no Debian 12

Leitura recomendada

Como anexar arquivos em email pelo modo texto

Limite de banda (bandwidth) nos comandos scp e rsync

history - Procurar comandos antigos

Assista Star Wars episódio IV no terminal

Criando uma imagem ISO no Ubuntu

  

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