Agendando tarefas no cron com horário aleatório

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

[ Hits: 1.423 ]

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

Configurando seu SSH para autenticação automática

Sistema de Arquivos em Rede (NFS)

Como fazer o curl ignorar certificado SSL inválido

KDE - Alt + F2 para executar comandos parou de funcionar [Resolvido]

Problemas em diretório com milhares de arquivos [Resolvido]

Leitura recomendada

Setando permissões de arquivos e diretórios

Desligar e Reiniciar o Linux pelo Terminal - Todas as Formas Possíveis

Removendo linhas duplicadas não-consecutivas

Baixando arquivos utilizando o wget

Vídeo aula: Como colocar wallpaper comum a todos os usuários

  

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