Jak automatycznie generować i wysyłać statystyki komputerów
Ważne jest, aby codziennie sprawdzać różne dane dziennika i statystyki na swoim serwerze, ale staje się to żmudne. Czy nie byłoby miło otrzymać jeden e-mail ze wszystkimi najważniejszymi wydarzeniami każdego dnia, więc nie musisz nawet wchodzić na serwer, aby sprawdzić problemy? Ten przewodnik pokaże Ci, jak skonfigurować automatyczne wiadomości e-mail w systemach Linux i Windows.
Będziemy to szczególnie dotyczyć Ubuntu i Windows 8.1, z Gmailem jako serwerem poczty e-mail, z którego wysyłana jest poczta. Jeśli masz inną wersję systemu Linux lub Windows lub wolisz korzystać z innej usługi poczty e-mail, instrukcje tutaj powinny być łatwe do dostosowania.
Automatyczne wiadomości e-mail w systemie Linux
Zamierzamy użyć dwóch różnych pakietów do wykonania tego, ssmtp i mailutils, więc zainstaluj oba z nich za pomocą następującego polecenia:
$ sudo apt-get install ssmtp mailutils
Po ich zainstalowaniu musimy dokonać pewnych zmian w pliku konfiguracyjnym SSMTP:
$ sudo vi /etc/ssmtp/ssmtp.conf
Edytuj plik za pomocą tych zmian (możesz bezpiecznie usunąć cały tekst z pliku i skopiować / wkleić te ustawienia, jeśli chcesz):
# Ten adres będzie otrzymywać wiadomości e-mail, więc wpisz tutaj swój adres e-mail, jeśli chcesz je otrzymywać.
# Określ serwer poczty e-mail tutaj (pozostaw tak, jak używasz Gmaila).
mailhub = smtp.gmail.com: 587
# Nazwa domeny, z której pochodzi poczta.
rewriteDomain = gmail.com
# Adres e-mail, z którego powinny pochodzić te wiadomości e-mail.
# Ustawienia SSL / TLS wymagane dla Gmaila i większości innych serwerów pocztowych.
UseTLS = Tak
UseSTARTTLS = Tak
# Nazwa użytkownika i hasło do konta Gmail.
AuthUser = nazwa użytkownika
AuthPass = hasło
# Zezwól na możliwość określenia adresu innego niż podany powyżej.
FromLineOverride = yes
Po zakończeniu edycji pliku będziesz chciał zmienić uprawnienia, ponieważ Twoje hasło do Gmaila jest zapisane w postaci zwykłego tekstu.
$ sudo chmod 640 /etc/ssmtp/ssmtp.conf
$ sudo chown nazwa_użytkownika.username /etc/ssmtp/ssmtp.conf
Zawsze jest bezpieczniej, aby rootować właściciela pliku, ale wtedy musielibyśmy użyć polecenia sudo w naszym skrypcie, a to by poprosiło nas o hasło, tym samym pokonując cel automatyzacji całego procesu.
Jeśli korzystasz z serwera współdzielonego i martwisz się, że Twoje hasło jest przechowywane w postaci zwykłego tekstu i możliwe do odczytania przez użytkownika root, utwórz wyrzucone konto Gmail lub skorzystaj z serwera poczty e-mail, który w pierwszej kolejności nie wymaga żadnego uwierzytelniania.
Aby upewnić się, że wszystko jest poprawnie skonfigurowane, spróbuj przetestować e-mail:
$ echo "Testowanie" | mail -s "Testowanie konfiguracji poczty" nazwa_uż[email protected]
"Testowanie" będzie znajdować się w treści wiadomości e-mail, a tematem będzie "Testowanie konfiguracji poczty". Sprawdź pocztę, aby się upewnić, że ją otrzymałeś.
Pisanie skryptu dla wiadomości e-mail
Teraz, gdy możemy wysyłać wiadomości e-mail z wiersza poleceń, napiszmy skrypt, który prześle nam podstawowe informacje o naszym systemie.
#! / bin / bash
# Sprawdź miejsce na dysku twardym
echo "Miejsce na dysku twardym:"> /home/geek/email.txt
df -h >> /home/geek/email.txt
# Lista użytkowników, którzy są zalogowani
echo "Użytkownicy aktualnie zalogowani:" >> /home/geek/email.txt
kto >> /home/geek/email.txt
# Lista aktualnie uruchomionych procesów
echo "Uruchomione procesy:" >> /home/geek/email.txt
ps -e >> /home/geek/email.txt
# Wyślij wiadomość e-mail
cat /home/geek/email.txt | mail -s "Codzienne informacje o serwerze" nazwa_uż[email protected]
# Usuń utworzony przez nas plik
rm /home/geek/email.txt
Oczywiście można uzyskać znacznie więcej szczegółów w swoim skrypcie, a nawet sprawić, że formatowanie będzie trochę przyjemniejsze, ale tak wygląda wynik w naszym e-mailu:
Skoro skrypt jest już napisany i przetestowany, możemy użyć crona do automatycznego wykonywania go o tej samej porze każdego dnia. W tym przykładzie skonfigurujemy e-mail, który będzie wysyłany o 2:00 rano każdego ranka, abyśmy mogli przeglądać dane później tego samego dnia.
$ crontab -e
W przypadku e-maili o godzinie 2:00 dodaj:
0 2 * * * /home/geek/script.sh
Napisaliśmy cały artykuł o plikach crontab, jeśli potrzebujesz więcej pomocy z tą częścią.
Automatyczne wiadomości e-mail w systemie Windows
Wysyłanie e-maili z poziomu wiersza poleceń jest możliwe dzięki PowerShell, ale stwierdziliśmy, że wdrożenie tej funkcji jest znacznie łatwiejsze w przypadku aplikacji firm trzecich, szczególnie w przypadku korzystania z Gmaila. SendEmail to darmowy program dostępny dla systemu Windows, który sprawia, że integracja z Windows Task Scheduler i Gmailem jest bardzo prosta. Kliknij powyższy link, aby pobrać najnowszą kopię i upewnij się, że korzystasz z wersji obsługiwanej przez TLS.
Po pobraniu SendEmail wyodrębnij plik zip i umieść go w miejscu, w którym możesz przechowywać je tak długo, jak planujesz wysyłać automatyczne wiadomości e-mail. W tym przykładzie będziemy po prostu przechowywać program w C: \ SendEmail
Przetestuj SendEmail, aby szybko zorientować się, jak to działa. Otwórz wiersz polecenia, wpisując polecenie cmd w menu Start lub Uruchom (Ctrl + R).
Po otwarciu wiersza polecenia użyj polecenia change directory, aby przejść do miejsca, w którym zostały zapisane pliki SendEmail.
cd C: \ SendEmail
Teraz możemy spróbować wysłać wiadomość testową za pomocą następującego polecenia:
sendEmail -f nazwa_uż[email protected] -t nazwa_uż[email protected] -s smtp.gmail.com:587 -xu nazwa użytkownika -xp hasło -u "Testuj temat wiadomości e-mail" -m "To jest wiadomość testowa."
Oczywiście przed wpisaniem polecenia zastąp "username" i "password" swoimi danymi uwierzytelniającymi swojego konta.
Oto co robi powyższe polecenie:
wysłać email
wykonuje program.
-fa
- z adresu
-t
- adresować
-s
- Serwer SMTP
-xu
- Nazwa użytkownika konta
-xp
- hasło do konta
-u
- temat emaila
-m
- treść wiadomości e-mail
Sprawdź swoją skrzynkę odbiorczą, aby upewnić się, że otrzymałeś wiadomość testową, a następnie możemy przejść do pisania skryptu, który prześle nam informacje o serwerze.
Pisanie skryptu dla wiadomości e-mail
Aby uzyskać jak najwięcej z naszego skryptu, zamierzamy napisać go dla PowerShell. Otwórz środowisko Windows PowerShell, wpisując polecenie powershell_ise.exe w wierszu polecenia (Ctrl + R).
Po prawej stronie okna programu PowerShell ISE można wyświetlić listę wszystkich poleceń, które program PowerShell może wykonać. To powinno dać ci dobry początek w generowaniu typów informacji, które potrzebujesz zgłosić. W swoim skrypcie możesz również wywoływać programy innych firm, aby uzyskać informacje wyjściowe (np. SendEmail jest aplikacją innej firmy, ale PowerShell i cmd mogą jej używać do wykonywania zadań, których normalnie nie mogą wykonywać).
W naszym przykładowym skrypcie sprawdzimy bieżące użycie dysku na dysku C, pokażemy aktualnie działające procesy i pokażemy wszystkie pliki, które są obecnie udostępniane w sieci.
# Sprawdź miejsce na dysku twardym
echo "C: Drive Usage:"> C: \ SendEmail \ info.txt
Get-WmiObject win32_LogicalDisk -Filter "DeviceID =" C: "" | Rozmiar Select-Object, FreeSpace >> C: \ SendEmail \ info.txt
# Lista aktualnie uruchomionych procesów
echo "Uruchomione procesy:" >> C: \ SendEmail \ info.txt
get-process >> C: \ SendEmail \ info.txt
# Lista plików / folderów aktualnie udostępnianych
echo "Udziały SMB:" >> C: \ SendEmail \ info.txt
get-smbshare >> C: \ SendEmail \ info.txt
# Wyślij wiadomość e-mail
wpisz C: \ SendEmail \ info.txt | C: \ SendEmail \ sendEmail -f nazwa_uż[email protected] -t nazwa_uż[email protected] -s smtp.gmail.com:587 -xu nazwa_użytkownika -xp hasło -u "Informacje o dziennym serwerze"
# Usuń utworzony przez nas plik
rm C: \ SendEmail \ info.txt
W tym skrypcie różne informacje są wysyłane do C: \ SendEmail \ info.txt, a tekst w tym dokumencie jest wysyłany do nas pocztą elektroniczną, zanim zostanie usunięty. Zapisz swój skrypt za pomocą rozszerzenia pliku ps1 (plik PowerShell).
Po zakończeniu skryptu uruchom szybki test z monitu Uruchom, aby upewnić się, że działa poprawnie.
Po prostu użyj powershell
polecenie z -plik
argument i podaj ścieżkę do skryptu.
powershell -file "c: \ SendEmail \ daily-email.ps1"
Sprawdź swoją skrzynkę odbiorczą, aby upewnić się, że otrzymałeś wiadomość e-mail - jeśli nie, sprawdź w swoim skrypcie błędy składni. Oto, jak wygląda wygenerowany e-mail z naszego przykładowego skryptu:
Możesz odtwarzać formatowanie (na przykład echo pustych linii między tekstem), aby lepiej wyświetlało się na urządzeniu, lub lepiej, możesz użyć programu innej firmy, który wypisze potrzebne informacje w bardziej czytelnym formacie niż Windows ( proces skryptowania będzie nadal taki sam).
Po opracowaniu załamań w skrypcie można za pomocą programu Windows Task Scheduler zautomatyzować go. Otwórz Harmonogram zadań systemu Windows za pomocą menu Start.
Przy otwartym Harmonogramie zadań wybierz Akcja> Utwórz zadanie podstawowe.
Nazwij to zadanie czymś w stylu "Codzienny skrypt e-mailowy" i kliknij obok. Na następnym ekranie wybierz częstotliwość, z którą chcesz uruchamiać skrypt e-mailowy, prawdopodobnie codziennie. Następnie wybierz czas uruchomienia skryptu i kliknij Dalej.
Teraz powinieneś być w części "Akcja" kreatora, wybierz "Rozpocznij program" i wpisz ten sam tekst, który wprowadziliśmy do polecenia Uruchom wcześniej, aby przetestować nasz skrypt.
Naciśnij przycisk Dalej, a następnie naciśnij Tak w tym oknie:
Kliknij Zakończ w ostatnim menu, a skończysz planowanie automatycznych wiadomości e-mail.