está ok para executar o cron job ao mesmo tempo?

2

queremos excluir todos os arquivos do trabalho a seguir com a mesma hora à meia-noite

0 0 * * * root  [[ -d /var/log/ambari-metrics-collector ]] && find  /var/log/ambari-metrics-collector  -type f -mtime +10 -regex '.*\.log.*[0-9]$' -delete 

0 0 * * * root  [[ -d /var/log/kO ]] && find  /var/log/Ko  -type f -mtime +10 -regex '.*\.log.*[0-9]$' -delete 

0 0 * * * root  [[ -d /var/log/POE ]] && find  /var/log/POE  -type f -mtime +10 -regex '.*\.log.*[0-9]$' -delete  

0 0 * * * root  [[ -d /var/log/REW ]] && find  /var/log/REW  -type f -mtime +10 -regex '.*\.log.*[0-9]$' -delete 

está tudo bem rodar tudo ao mesmo tempo?

O trabalho cron dose irá executá-los passo a passo? ou ambos todos no mesmo tópico?

    
por yael 29.08.2018 / 21:36

3 respostas

2

Sim, é perfeitamente aceitável ter cron agendar vários trabalhos ao mesmo tempo.

Computadores do nada simultaneamente, no entanto, e eles serão iniciados na ordem presente na tabela cron . No entanto, eles não serão executados em seqüência; eles serão iniciados um após o outro em alguns milissegundos da meia-noite - simultaneamente para todos os fins práticos.

    
por 29.08.2018 / 21:44
3

O Cron iniciaria todos os trabalhos praticamente ao mesmo tempo e eles seriam executados simultaneamente.

Para trabalhos de limpeza como esses, seria melhor escrever um script de shell curto para executar o procedimento de maneira seqüencial. Isso impediria que os múltiplos find fossem atrasados (e tornando o acesso ao disco no restante do sistema potencialmente um pouco lento). Também tornaria mais fácil alterar / atualizar o procedimento de limpeza (por exemplo, adicionar novos diretórios ou modificar os critérios find etc.) sem precisar modificar sua especificação de cron (ou adicionar mais trabalhos de limpeza). ).

Por exemplo,

#!/bin/bash

for dir in /var/log/{ambari-metrics-collector,k0,POE,REW}; do
    [ ! -d "$dir" ] && continue
    find  "$dir" -type f -mtime +10 -regex '.*\.log.*[0-9]$' -delete
done

Ou apenas

#!/bin/bash

find  /var/log/{ambari-metrics-collector,k0,POE,REW} -type f -mtime +10 -regex '.*\.log.*[0-9]$' -delete

(que também produziria erros se um ou vários desses diretórios não existirem, o que pode ou não ser útil saber)

Você, então, agendaria a execução desse script usando o cron da maneira que for apropriada em seu sistema.

Um pouco mais chique:

#!/bin/bash

# directories to clean up
dirs=( /var/log/ambari-metrics-collector
       /var/log/k0
       /var/log/POE
       /var/log/REW
)

for dir in "${dirs[@]}"; do
    if [ ! -d "$dir" ]; then
        printf 'Dir "%s" does not exist, check this!\n' "$dir" >&2
    else
        printf 'Removing files from "%s":\n' "$dir"
        find  "$dir" -type f -mtime +10 -regex '.*\.log.*[0-9]$' -print -delete
    fi
done

Ou, desfaça-se dessa abordagem por completo e use logrotate ou software semelhante e faça a manutenção do arquivo de log corretamente.

    
por 30.08.2018 / 11:01
1

Cron iniciará todos os 4 processos em paralelo à meia-noite.

    
por 29.08.2018 / 21:42