Важно проверять различные данные журнала и статистику на вашем сервере каждый день, но это становится утомительным. Разве не было бы неплохо получать одно электронное письмо со всеми основными моментами каждый день, поэтому вам даже не нужно заходить на сервер, чтобы проверить наличие проблем? Это руководство покажет вам, как настроить автоматическую электронную почту в Linux и Windows.
Мы специально рассмотрим это для Ubuntu и Windows 8.1, а Gmail будет использоваться в качестве сервера электронной почты, с которого отправляется почта. Если у вас есть другая версия Linux или Windows, или вы предпочитаете использовать какой-либо другой почтовый сервис, приведенные здесь инструкции должны легко адаптироваться.
Автоматизированные электронные письма в Linux
Для этого мы будем использовать два разных пакета, ssmtp и mailutils, поэтому установите их оба с помощью следующей команды:
$ sudo apt-get install ssmtp mailutils
После того, как они установлены, нам нужно внести некоторые изменения в файл конфигурации SSMTP:
$ sudo vi /etc/ssmtp/ssmtp.conf
Отредактируйте файл с этими изменениями (можно просто стереть весь текст в файле и скопировать/вставить эти настройки, если хотите):
# Этот адрес будет получать электронные письма, поэтому введите свой адрес электронной почты здесь, если вы хотите их получать.
root=username@gmail.com
# Укажите здесь почтовый сервер (оставьте как есть, если вы используете Gmail).
mailhub = smtp.gmail.com: 587
# Доменное имя, с которого будет приходить почта.
rewriteDomain = gmail.com
# Адрес электронной почты, с которого должны быть эти письма.
hostname=username@gmail.com
# Настройки SSL/TLS, необходимые для Gmail и большинства других почтовых серверов.
UseTLS = Да
UseSTARTTLS = Да
# Имя пользователя и пароль для вашей учетной записи Gmail.
AuthUser = имя пользователя
AuthPass = пароль
# Разрешить указывать адрес отправителя, отличный от указанного выше.
FromLineOverride = да
Когда вы закончите редактирование файла, вы захотите изменить разрешения, поскольку ваш пароль Gmail хранится в незашифрованном виде.
$ sudo chmod 640 /etc/ssmtp/ssmtp.conf
$ sudo chown username.username /etc/ssmtp/ssmtp.conf
Всегда более безопасно сделать root владельцем файла, но тогда нам нужно будет использовать команду sudo в нашем скрипте, и она запросит у нас пароль, что не позволит автоматизировать весь этот процесс.
Если вы используете общий сервер и беспокоитесь о том, что ваш пароль хранится в незашифрованном виде и доступен для чтения root, создайте одноразовую учетную запись Gmail или используйте почтовый сервер, который не требует никакой проверки подлинности.
Чтобы убедиться, что все настроено правильно, давайте попробуем проверить электронную почту:
$ echo "Тестирование" | mail -s "Проверка настроек почты" username@gmail.com
«Тестирование» будет в теле письма, а тема – «Тестирование настройки почты». Проверьте свою электронную почту, чтобы убедиться, что вы ее получили.
Написание скрипта для писем
Теперь, когда мы можем отправлять электронные письма из командной строки, давайте напишем скрипт, который отправит нам некоторую основную информацию о нашей системе.
#!/Bin/баш
# Проверить место на жестком диске
echo "Место на жестком диске:"> /home/geek/email.txt
df -h >> /home/geek/email.txt
# Список пользователей, которые вошли в систему
echo "В данный момент пользователи вошли в систему:" >> /home/geek/email.txt
who >> /home/geek/email.txt
# Список текущих запущенных процессов
echo "Запуск процессов:" >> /home/geek/email.txt
ps -e >> /home/geek/email.txt
# Отправьте электронное письмо
cat /home/geek/email.txt | mail -s "Ежедневная информация о сервере" username@gmail.com
# Удалить созданный нами файл
rm /home/geek/email.txt
Очевидно, что вы можете получить намного больше подробностей с вашим сценарием и даже сделать форматирование немного приятнее, но вот как выглядит результат в нашей электронной почте:
Теперь, когда скрипт написан и протестирован, мы можем использовать cron для его автоматического выполнения каждый день в одно и то же время. В этом примере мы настроим электронное письмо, которое будет отправляться в 2:00 утра каждое утро, чтобы мы могли просмотреть данные позже в тот же день.
$ crontab -e
Для 2:00 утра по электронной почте добавьте:
0 2 * * */home/geek/script.ш
Мы написали целую статью о файлах crontab, если вам нужна дополнительная помощь по этой части.
Автоматические электронные письма в Windows
Отправка сообщений электронной почты в командной строке возможна с помощью PowerShell, но мы обнаружили, что реализовать эту функцию намного проще в сторонних приложениях, особенно при использовании Gmail. SendEmail – это бесплатная программа, доступная для Windows, благодаря которой интеграция с Windows Task Scheduler и Gmail становится проще. Нажмите на ссылку выше, чтобы загрузить последнюю версию, и убедитесь, что вы взяли версию с поддержкой TLS.
После того, как вы загрузили SendEmail, извлеките zip-файл и поместите содержимое в то место, где вы сможете хранить его до тех пор, пока вы планируете отправлять автоматические электронные письма. В этом примере мы просто собираемся сохранить программу в C: \ SendEmail
Давайте протестируем SendEmail, чтобы быстро понять, как он работает. Откройте командную строку, введя cmd в меню «Пуск» или «Выполнить» (Ctrl + R).
В открытой командной строке используйте команду изменения каталога, чтобы перейти к месту хранения файлов SendEmail.
cd C: \ SendEmail
Теперь мы можем попробовать отправить тестовое письмо с помощью следующей команды:
sendEmail -f username@gmail.com -t username@gmail.com -s smtp.gmail.com:587 -xu username -xp пароль -u "Проверка темы письма" -m "Это проверка письма".
Очевидно, замените «username» и «password» на учетные данные своей учетной записи перед выполнением команды.
Вот что на самом деле делает команда выше:
sendEmail
запускает программу.
-f
– с адреса
-t
– по адресу
-s
– SMTP-сервер
-xu
– имя пользователя учетной записи
-xp
– пароль учетной записи
-u
– тема письма
-m
– основной текст письма
Проверьте свой почтовый ящик, чтобы убедиться, что вы получили тестовое электронное письмо, и тогда мы можем перейти к написанию сценария, который будет отправлять нам информацию о сервере.
Написание скрипта для писем
Чтобы получить максимальную отдачу от нашего сценария, мы собираемся написать его для PowerShell. Откройте Windows PowerShell ISE, введя powershell_ise.exe в строку «Выполнить» (Ctrl + R).
В правой части окна PowerShell ISE вы можете перечислить все команды, которые PowerShell может выполнить. Это должно дать вам хорошее начало для создания типов информации, о которой вам необходимо сообщить. В вашем сценарии вы также можете вызывать сторонние программы для вывода информации (то есть SendEmail – это стороннее приложение, но PowerShell и cmd могут использовать его для выполнения задач, которые они обычно не могут).
В нашем примере сценария мы проверим текущее использование диска C, покажем запущенные в данный момент процессы и покажем все файлы, которые в данный момент передаются по сети.
# Проверить место на жестком диске
echo "C: Использование диска:"> C: \ SendEmail \ info.txt
Get-WmiObject win32_LogicalDisk -Filter "DeviceID = 'C:'" | Выбор размера объекта, FreeSpace >> C: \ SendEmail \ info.txt
# Список текущих запущенных процессов
echo "Запущенные процессы:" >> C: \ SendEmail \ info.txt
get-process >> C: \ SendEmail \ info.txt
# Список файлов/папок, к которым в данный момент открыт общий доступ
echo "SMB share:" >> C: \ SendEmail \ info.txt
get-smbshare >> C: \ SendEmail \ info.txt
# Отправьте электронное письмо
тип C: \ SendEmail \ info.txt | C: \ SendEmail \ sendEmail -f username@gmail.com -t username@gmail.com -s smtp.gmail.com:587 -xu username -xp пароль -u "Ежедневная информация о сервере"
# Удалить созданный нами файл
rm C: \ SendEmail \ info.txt
В этом сценарии различная информация выводится в C: \ SendEmail \ info.txt, а затем текст в этом документе отправляется нам по электронной почте перед его удалением. Сохраните сценарий с расширением файла ps1 (файл PowerShell).
Закончив работу сценария, запустите быстрый тест из приглашения «Выполнить», чтобы убедиться, что он работает правильно.
Просто используйте команду powershell
с аргументом -file
и укажите путь к вашему сценарию.
powershell -file "c: \ SendEmail \ daily-email.ps1"
Проверьте свой почтовый ящик, чтобы убедиться, что вы получили письмо – если нет, просмотрите скрипт на наличие ошибок синтаксиса. Вот как выглядит сгенерированное письмо из нашего примера скрипта:
Вы можете поиграть с форматированием (например, отображением пустых строк между текстом), чтобы оно лучше отображалось на вашем устройстве, или, что еще лучше, вы можете использовать стороннюю программу, которая выводит необходимую информацию в более удобочитаемом формате, чем Windows ( процесс написания сценария будет таким же).
После того, как вы обработали изломы в своем скрипте, вы можете использовать планировщик заданий Windows для его автоматизации. Откройте планировщик заданий Windows через меню «Пуск».
При открытом планировщике задач выберите «Действие»> «Создать базовую задачу».
Назовите эту задачу как-нибудь «Ежедневный почтовый скрипт» и нажмите «Далее». На следующем экране выберите частоту, с которой вы хотите запускать скрипт электронной почты, возможно, ежедневно. Затем выберите время запуска сценария и нажмите «Далее».
Теперь вы должны быть в части «Действие» мастера, выбрать «Запустить программу» и введите тот же текст, который мы ввели в приглашение «Выполнить» ранее, чтобы протестировать наш скрипт.
Нажмите «Далее» и затем нажмите «Да» в этом окне:
Нажмите «Готово» в последнем меню, и вы закончили составлять расписание ваших автоматических электронных писем.