POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - ENVIA MSG CASO O USUÁRIO PASSE 90% DA SUA QUOTA
Publicado por Alessandro Dias 17/05/2005
[ Hits: 4.240 ]
Este Script varre a lista de usuários, calcula o tamanho das suas mensagens e verifica se o usuário chegou a 90% de sua quota no sistema. Então, caso isso aconteça, é enviada uma mensagem para o usuário. Esse script é executado diariamente.
#!/bin/sh # ############################################################################### # Script QUOTA.SH v2.0 # # # # Autor: Alessandro Dias # ############################################################################### # # # Programa atualizado para trabalhar com SGBD Mysql e uma cota por usuário. # # # ############################################################################### # Este programa calcula o tamanho dos emails recebidos (Entrada + Pastas), # # e envia uma mensagem de alerta qdo o usuario ultrapassa 90% da quota. # # Nao precisa de nenhum pacote adicional, como ldap, mysql, postgre, etc. # # Para instalacao basta alterar as permissoes deste arquivo, e colocalo na # # pasta /etc/cron.daily para a execucao diaria do script. # # Alem disso vc deve alterar as variaveis para adaptar ao seu sistema # ############################################################################### # BASEDIR=/var/mail MYHOSTNAME="venus.rjo.ccom.eb.mil.br" MYDOMAIN="rjo.ccom.eb.mil.br" TODOS=`cat /etc/passwd | cut -d : -f 1` clear echo "*********************************************************************************************" echo "* Programa QUOTA.SH 2.0 *" echo "*********************************************************************************************" echo "Autor: Alessandro Dias" echo "Quota Padrão: 100MBytes" echo "---------------------------------------------------------------------------------------------" echo "Usuarios do sistema: " i=24 USERNAME="teste" # inicializa USERNAME while [ "$USERNAME" != "" ]; do USERNAME=`echo $TODOS |cut -d " " -f $i` GRUPO=`groups $USERNAME |cut -d " " -f 3` if [ "$GRUPO" = "popusers" -a -f $BASEDIR/$USERNAME ]; then #QUOTA - Tamanho em Bytes (100MBytes) QUOTA_MB=$(mysql -u root -ppostfix -e "select quota from user_quota where usuario='$USERNAME'" quota) QUOTA_MB=`echo $QUOTA_MB |cut -d " " -f 2` MAILQUOTA=`expr $QUOTA_MB \* 1000000` MBOX=`du -ab $BASEDIR/$USERNAME 2>/dev/null | cut -f 1` HOME=`du -b /home/$USERNAME/mail | cut -f 1` TAMATUAL=`expr $MBOX \+ $HOME` TAMATUAL_TMP=`expr $TAMATUAL \* 100` MBOX_TMP=`expr $MBOX \* 100` HOME_TMP=`expr $HOME \* 100` USO_MBOX=`expr $MBOX_TMP / $MAILQUOTA` USO_HOME=`expr $HOME_TMP / $MAILQUOTA` USO=`expr $TAMATUAL_TMP / $MAILQUOTA` echo "U:$USERNAME G:$GRUPO Q:$QUOTA_MB T:(mbox=$MBOX + home=$HOME) = $TAMATUAL U:(mbox=$USO_MBOX% + home=$USO_HOME%) = $USO%" # Atualiza a utulização da mbox mysql -u root -ppostfix -e "update user_quota set uso=$USO where usuario='$USERNAME'" quota if [ $USO -ge 90 ]; then #Wed, 6 Apr 2005 11:48:47 -0000 (UTC) #Convertendo data para ingles DIA=`date +%a` case $DIA in Seg) DIA="Mon" ;; Ter) DIA="Tue" ;; Qua) DIA="Wed" ;; Qui) DIA="Thu" ;; Sex) DIA="Fri" ;; Sab) DIA="Sat" ;; Dom) DIA="Sun" ;; esac MES=`date +%b` case $MES in Abr) MES="Apr" ;; Mai) MES="May" ;; Ago) MES="Aug" ;; Set) MES="Sep" ;; Out) MES="Oct" ;; esac echo -e "\nFrom postmaster@$MYDOMAIN `date +\"%a %b %d %X %Y\"`\nReturn-Path: <postmaster@$MYHOSTNAME>\nX-Original-To: postmaster\nDelivered-To: postmaster@$MYDOMAIN\nReceived: by $MYHOSTNAME (Postfix, userid 0)\nFrom: \"POSTMASTER\" <postmaster@$MYDOMAIN>\nTo: $USERNAME@$MYDOMAIN\nSubject: Aviso de Quota ($USO%)\nDate: $DIA, `date +%e` $MES `date +%Y` `date +%T` -0300 (BRT)\n\nAtencao: Sua caixa de mensagens esta proxima do limite de 100MBytes (Uso=$USO%).\n\nProcure apagar algumas mensagens para liberar mais espaco. Quando sua quota atingir 100% de utilizacao, voce nao recebera mais mensagens. Vc pode salvar algumas mensagens como arquivo, antes de apaga-las.\n\n--- Resumo de utilizacao: ---\nTamanho(bytes): ( mbox=$MBOX + pastas=$HOME ) = $TAMATUAL\nPercentual: ( mbox=$USO_MBOX% + pastas=$USO_HOME% ) = $USO%\n\n --------------------------\n Secao de Gerencia de Redes\n 2CTA - Div Op - SGRT\n Contatos (2519-5076/5068)\n" >> $BASEDIR/$USERNAME echo -e "\nFrom postmaster@$MYDOMAIN `date +\"%a %b %d %X %Y\"`\nReturn-Path: <postmaster@$MYHOSTNAME>\nX-Original-To: postmaster\nDelivered-To: postmaster@$MYDOMAIN\nReceived: by $MYHOSTNAME (Postfix, userid 0)\nFrom: \"Gerente de QUOTA\" <postmaster@$MYDOMAIN>\nTo: postmaster@$MYDOMAIN\nSubject: Usuario $USERNAME ($USO% de $QUOTA_MB MB)\nDate: $DIA, `date +%e` $MES `date +%Y` `date +%T` -0300 (BRT)\n\nAtencao: Esta mensagem deve ser recebida apenas pelo Administrador do Sistema, conta suporte@rjo.ccom.eb.mil.br.\n\nResumo:\n-------\nUsuario: $USERNAME\nUso: $USO%\nQuota: $QUOTA_MB MB\n\n\nSr. Administrador, \nentre em contato com o usuario $USERNAME para comunicar o ocorrido, evitando que este deixe de receber mensagens no futuro.\n\n --------------------------\n Secao de Gerencia de Redes\n 2CTA - Div Op - SGRT\n by Cap Dias\n" >> $BASEDIR/suporte fi fi i=`expr $i \+ 1` done echo -e "---------------------------------------------------------------------------------------------\n"
Procurando um padrão num arquivo
Plugin do Nagios para checar disco via SNMP
bookmaker.bash: Script para imprimir livros com 4 páginas em uma folha
Instalação do Layer7 e compilação do kernel (automático)
Verifica Falha Humana de Segurança em e-mail (usada por SPAMERS)
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (15)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)