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.328 ]
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"
Alteração de Senha do Mysql (sem saber a senha anterior).
Script simples para fazer backup em fita DAT
Registar automáticamente o dns de uma maquina no DNS via DHCP
Instale o driver proprietário Nvidia baixado do site oficial em qualquer distro
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Como gerar um podcast a partir de um livro em PDF
Organizando seus PDF com o Zotero
Erro no realm join [Resolvido]
Um programa para baixar vídeos: Parabolic
Como Definir o Painel Principal em Múltiplos Monitores no Linux Mint
como instalo panfrost-dri e o driver panfrost fork , ou panfrost (12)
Sempre que vou baixar algum pacote acontece o erro dpkg (6)
Não consigo montar meu cartão SD (7)