Execução de peças Crontab

2

Estou vendo o script run-parts no CentOS 7. Muito parecido com isto:

link

Parece que todos os diretórios cron.hourly etc. são executados em sequência com um atraso aleatório entre 1 e 300 segundos.

Eu tenho muitos scripts em cron.hourly e preciso executar minha configuração exclusiva. O que eu gostaria é que todos sejam executados ao mesmo tempo, mas com um atraso aleatório antes de cada um.

Algo como:

directory_script_list = contents(/etc/cron.hourly)
for script in directory_script_list:
  if script_is_executeable(script):
    execute(sleep(random(1, 300)) && script) &)

Eu não quero o servidor sobrecarregado a cada hora quando eles acertam e eu também não quero um desses scripts bloqueando os outros.

Os scripts não usam muita carga de CPU, o que eles fazem na maioria das vezes é consultar a resposta lenta dos dispositivos SNMP, muitos deles e de várias maneiras. Alguns levam muito tempo para serem concluídos e outros são muito rápidos. Não muito tráfego de rede também. Atualmente, há cerca de 30 scripts, mas eu os adiciono, atualizo e removo com frequência.

Alguém sabe de algo que existe assim?

    
por Matt 03.02.2017 / 17:09

1 resposta

3

Como as partes de execução são muito parecidas com o que você deseja, você pode fazer uma cópia das partes de execução e modificá-las para torná-las exatamente o que você deseja.

Por exemplo:

# cp -a /usr/bin/run-parts /usr/local/bin/run-parts-parallel

Em seguida, adicione um '&' após o último 'fi' em / usr / local / bin / run-parts-paralelo, como você pode ver neste diff:

# diff -u /usr/bin/run-parts /usr/local/bin/run-parts-parallel 
--- /usr/bin/run-parts  2014-06-09 18:14:31.000000000 -0400
+++ /usr/local/bin/run-parts-parallel   2017-02-03 14:55:11.327000000 -0500
@@ -95,7 +95,7 @@
               { print; }'
        logger -i -p cron.notice -t "run-parts($1)" "finished $(basename $i)"
    fi
-   fi
+   fi &
 done

 exit 0

Você pode alterar a linha em /etc/cron.d/0hourly de:

01 * * * * root run-parts /etc/cron.hourly

para

01 * * * * root RANDOMIZE=1 RANDOMTIME=300 /usr/local/run-parts-parallel /etc/cron.hourly

O script também pode ser modificado para usar /etc/sysconfig/run-parts-parallel para definir as variáveis RANDOM * e removê-las do arquivo crontab. Ou, se você não estiver usando partes de execução em outro lugar, poderá colocar as variáveis RANDOM * em /etc/sysconfig/run-parts para tornar o atraso aleatório o padrão global.

    
por 03.02.2017 / 21:16