Limitar o uso do cron

3

Eu tenho uma hospedagem no hostgator e acabei de descobrir que eles não permitem * * * * * trabalhos cron. Se eu tiver um que corra menos que a cada 15 minutos, eles mudam para * / 17 ou algo parecido. Eu procurei, mas não consigo encontrar uma maneira de fazer isso em minhas próprias instalações do cPanel. Qualquer sugestão sobre como replicar isso.

Observação: não estou procurando uma resposta para contornar essa restrição. Estou tentando descobrir como implementá-lo em minhas próprias implantações.

Obrigado.

    
por recluze 13.06.2011 / 02:18

1 resposta

4

Não conheço um pacote padrão para implementar esse recurso.

Você pode, claro, criar uma tarefa cron do root que verifique e "corrija" os cronjobs do usuário. Pegue o script a seguir, por exemplo - ele não foi testado principalmente, mas funcionou com alguns exemplos que eu usei.

#!/bin/bash
min=16 # the minimum allowed interval between runs
for crontab in /var/spool/cron/crontabs/*
do
  cp $crontab $crontab.bak
  # replace the * * * * * jobs with */16 * * * * jobs.
  sed -i "s/\* \* \* \* \*/\*\/16 * * * */" $crontab
  for i in 'seq 1 $min'
  do  
    # replace */N * * * * for every N <= min
    sed -i "s/\*\/$i \* \* \* \*/*\/16 * * * */" $crontab
  done
done

Isso pressupõe que os campos crontab sejam separados por espaços, o que pode não ser verdade - usei essa suposição para manter o regex (esperançosamente) compreensível. Para torná-lo mais robusto, substitua todos os espaços dentro dos regexes da mão esquerda por \s , se o seu sed suportar, ou [ \t]+ (eu acho), se não o fizer.

Observe que o exemplo aplica 17 diferentes pesquisas e substituições sobre cada crontab, o que obviamente será inaceitável quando o número de crontabs aumentar. Para aliviar esse problema, você pode usar uma única regex para corresponder a todos os possíveis cronwares infratores. Por exemplo, algo como (não testado): \*(/[0-9][0-5])* \* \* \* \* ou um processualmente construído usando a saída de seq -s '|' 0 $min . Deixe-me saber se você precisar de ajuda com isso.

    
por 13.06.2011 / 03:25