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.