Precisa de ajuda para criar um script de espaço em disco

2

Preciso de ajuda para criar um script que será executado uma vez por dia à tarde e coletar as informações de cada partição ( espaço em disco, total e usado ) e enviá-lo para o meu email.

Por favor, ajude im muito muito novo nesta coisa de script.

    
por OmiPenguin 16.09.2012 / 09:29

3 respostas

2

Desde que você tenha um MTA configurado nessa máquina para aceitar e retransmitir e-mails para você (em um servidor que deve ser o caso) tente isto:

$ df -h | mail -s "Filesystem usage report for 'hostname'" [email protected]

(MTA = Postfix, Exim, etc.)

Seissoatenderàssuasnecessidades,adicione-oaocrontabparaexecutá-lotodososdias:

$crontab-e

Umeditorseráaberto.Adicioneumalinhacomoesta:

@dailydf-h|mail-s...

Salvarefechar.

Issofarácomquesejaexecutadocomasoutrastarefasdiárias.Sevocêprecisardeumrelatórioemumahoraespecíficadodiaoudeumregistrodeerroparaumendereçoespecífico,leiasobreasintaxedocron(muitodissoestánaInternet- aqui é um site aleatório). Por exemplo:

[email protected]
# at 5 a.m every day:
0 5 * * * mycommand

Caso você não possa enviar mensagens diretamente na máquina, leia this ou a resposta de @hakermania em como fazer isso (existem muitas outras formas).

    
por gertvdijk 16.09.2012 / 11:43
4

Para tornar o script em execução, você precisará configurar um cron job com ele: Como configuro um cronjob?

Agora, dentro do seu script, você precisará fazer algo assim:

#!/bin/bash
#script that simply saves the output of df -h to an output file
#which is sent as an attachment to an e-mail

#a) save the output of the command:
temp_file=$(mktemp)

df -h > $temp_file 2> /dev/null

/root/email.py [email protected] "Title here" "Body here. The current date and time is $(date)" "$temp_file"

sleep 3
rm -rf $temp_file

Como você pode ver, eu estou chamando um script python de dentro do seu caminho raiz (não legível, mas ninguém mais, mas ele próprio root), que leva os seguintes argumentos:

"destinatário-email" "título-de-email" "corpo-de-email" "anexo"

Este script python é este:

#!/usr/bin/python
import os, re
import sys
import smtplib

from email import encoders
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.MIMEText import MIMEText


SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587


sender = '[email protected]'
password = "yourpasswordhere"
recipient = sys.argv[1]
subject = ''
message = sys.argv[3]

def main():
    msg = MIMEMultipart()
    msg['Subject'] = sys.argv[2]
    msg['To'] = recipient
    msg['From'] = sender

    part = MIMEText('text', "plain")
    part.set_payload(message)
    msg.attach(part)

    session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)

    session.ehlo()
    session.starttls()
    session.ehlo

    session.login(sender, password)

    fp = open(sys.argv[4], 'rb')
    msgq = MIMEBase('audio', 'audio')
    msgq.set_payload(fp.read())
    fp.close()
    # Encode the payload using Base64
    filename=sys.argv[4]
    msgq.add_header('Content-Disposition', 'attachment', filename=filename)
    msg.attach(msgq)
    # Now send or store the message
    qwertyuiop = msg.as_string()



    session.sendmail(sender, recipient, qwertyuiop)

    session.quit()
    os.system('notify-send "Your disk space related email has been sent."')

if __name__ == '__main__':
    main()

É claro que você precisará fornecer seu e-mail e senha do gmail na parte superior do script ( sender e password variables). Se você instalar o pacote libnotify-bin , se o email foi enviado com sucesso, você será notificado com uma notificação na área de trabalho.

Então, resumindo, você precisará configurar uma tarefa cron com o script bash acima. Este script bash salvará a saída de df -h dentro de um arquivo temporário, que será enviado por meio de um script python para um email de destinatário de sua escolha (até onde eu lembre-se, o e-mail do remetente deve ser gmail).

PS: A solução acima mostrará o espaço livre e total em disco apenas dos seus sistemas de arquivos montados. Se isso for um problema, por favor me avise para estender minha resposta sobre como montar automaticamente todos os sistemas de arquivos disponíveis e então executar df -h .

    
por hytromo 16.09.2012 / 11:42
0

Você pode usar este script para verificar o uso do disco

#!/bin/bash

limit=85
[email protected]
host='hostname'
out='df -k | grep "^/dev" | awk '{ if($5 > $limit) print "\nDisk space is critial on " $1,$5,$6 "\n"}''
usr/bin/mail -s "Disk Space Alert on $host: $out" $email

Use cron para fazer o script ser executado automaticamente. Verifique este gerador de cron para ajudá-lo a configurá-lo.

    
por devav2 16.09.2012 / 13:38

Tags