Мне нужна помощь в создании сценария , который будет запускать один раз в день днем и собирать информацию о каждом разделе ( Дисковое пространство, общее и использованное ). ) и отправьте его на мою электронную почту.
Пожалуйста, помогите мне очень, очень новичку в этом сценарии.
При условии, что на этом компьютере настроен MTA для приема и пересылки почты для вас (на сервере, который должен иметь место), попробуйте следующее:
$ df -h | mail -s "Filesystem usage report for `hostname`" myemail@domain.tld
(MTA = Postfix, Exim, и т.
$ crontab -e
Откроется редактор. Добавьте следующую строку:
@daily df -h | mail -s ...
Сохраните и закройте.
Это заставит его работать с другими ежедневными задачами. Если вам нужен отчет о конкретном времени дня или регистрация ошибок по конкретному адресу, пожалуйста, прочитайте о синтаксисе cron (многое из этого есть в Интернете - здесь - один случайный сайт). Например:
MAILTO=myerroraddress@domain.tld
# at 5 a.m every day:
0 5 * * * mycommand
Если вы не можете отправлять почту на эту машину напрямую, прочитайте этот или ответ @hakermania о том, как это сделать (существует много других способов. ).
Для создания сценария, выполняющего Вас, должен будет установить задание крона с ним: Как я устанавливаю cronjob?
Теперь, в Вашем сценарии, необходимо будет сделать что-то вроде этого:
#!/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 recipient@gmail.com "Title here" "Body here. The current date and time is $(date)" "$temp_file"
sleep 3
rm -rf $temp_file
Как Вы видите, я называю сценарий Python из Вашего корневого пути (не читаемый, но никто больше, но корень сам), который берет следующие аргументы:
"тело электронной почты" "заголовка электронной почты" "электронной почты получателя" "вложение"
Этот сценарий Python - это:
#!/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 = 'youremailhere@gmail.com'
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()
Конечно, необходимо будет предоставить ему электронную почту Gmail и пароль наверху сценария (sender
и password
переменные). Если Вы устанавливаете libnotify-bin
пакет, затем, если электронное письмо было успешно послано, Вы будете уведомлены с настольным уведомлением.
Так, подводя итог, необходимо будет установить задание крона с вышеупомянутым сценарием удара. Этот сценарий удара сохранит вывод df -h
во временном файле, который будет отправлен с помощью сценария Python в электронное письмо получателя по Вашему выбору (насколько я помню, электронная почта отправителя должна быть Gmail).
PS: вышеупомянутое решение покажет бесплатное и общее дисковое пространство только Ваших смонтированных файловых систем. Если это - проблема, сообщите мне, чтобы расширить мой ответ о том, как автоматически смонтировать все доступные файловые системы и затем работать df -h
.
Вы можете использовать этот скрипт для проверки использования диска.
#!/bin/bash
limit=85
email=you@domain.com
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
. Использовать cron
для автоматического запуска скрипта. Проверьте этот онлайн генератор cron , чтобы помочь вам в его настройке.