Hoe automatisch computergegevens te genereren en e-mailen
Het is belangrijk om elke dag verschillende loggegevens en statistieken op uw server te controleren, maar het wordt saai. Zou het niet leuk zijn om elke dag een enkele e-mail met alle hoogtepunten te ontvangen, dus je hoeft niet eens op de server te komen om te controleren op problemen? Deze handleiding zal u laten zien hoe u geautomatiseerde e-mails kunt configureren op Linux en Windows.
We zullen dit specifiek behandelen voor Ubuntu en Windows 8.1, waarbij Gmail wordt gebruikt als de e-mailserver waartoe mail wordt verzonden. Als u een andere versie van Linux of Windows hebt, of liever een andere e-mailservice gebruikt, moeten de instructies hier gemakkelijk kunnen worden aangepast.
Geautomatiseerde e-mails in Linux
We gaan twee verschillende pakketten gebruiken om dit te bereiken, ssmtp en mailutils, dus installeer ze allebei met de volgende opdracht:
$ sudo apt-get installeer ssmtp mailutils
Zodra deze zijn geïnstalleerd, moeten we enkele wijzigingen in het SSMTP-configuratiebestand aanbrengen:
$ sudo vi /etc/ssmtp/ssmtp.conf
Bewerk het bestand met deze wijzigingen (het is veilig om gewoon alle tekst in het bestand te wissen en deze instellingen te kopiëren en plakken, als je dat wilt):
# Dit adres ontvangt de e-mails, dus voer hier uw eigen e-mailadres in als u deze wilt ontvangen.
# Geef hier de e-mailserver op (laat dit staan als u Gmail gebruikt).
mailhub = smtp.gmail.com: 587
# De domeinnaam waarvan de mail afkomstig zal zijn.
rewriteDomain = gmail.com
# Het e-mailadres waar deze e-mails vandaan zouden moeten komen.
# SSL / TLS-instellingen, vereist voor Gmail en de meeste andere e-mailservers.
UseTLS = Ja
UseSTARTTLS = Ja
# De gebruikersnaam en het wachtwoord voor uw Gmail-account.
AUTHUSER = gebruikersnaam
AuthPass = wachtwoord
# Sta de mogelijkheid toe om een vanaf-adres op te geven dat verschilt van het adres hierboven.
FromLineOverride = yes
Als je klaar bent met het bewerken van het bestand, wil je de rechten wijzigen omdat je Gmail-wachtwoord in gewone tekst is opgeslagen.
$ sudo chmod 640 /etc/ssmtp/ssmtp.conf
$ sudo chown gebruikersnaam.username /etc/ssmtp/ssmtp.conf
Het is altijd veiliger om root de eigenaar van het bestand te maken, maar dan moeten we de opdracht sudo in ons script gebruiken en dit zou ons om een wachtwoord vragen, waarbij we het doel van het automatiseren van dit hele proces verslaan.
Als u een gedeelde server gebruikt en u zich zorgen maakt over het feit dat uw wachtwoord in leesbare tekst wordt opgeslagen en door root kan worden gelezen, maakt u een wegwerp-Gmail-account of gebruikt u een e-mailserver die in de eerste plaats geen type authenticatie vereist..
Om te controleren of alles correct is geconfigureerd, proberen we een test-e-mail:
$ echo "Testen" | mail -s "Testen van mail setup" [email protected]
'Testen' staat in de hoofdtekst van het e-mailbericht en het onderwerp is 'Testen van e-mailinstellingen'. Controleer uw e-mail om te controleren of u deze heeft ontvangen.
Een script schrijven voor de e-mails
Nu we e-mails van de opdrachtregel kunnen verzenden, kunnen we een script schrijven dat ons wat basisinformatie over ons systeem bezorgt.
#! / Bin / bash
# Controleer de ruimte op de harde schijf
echo "Vaste-schijfruimte:"> /home/geek/email.txt
df -h >> /home/geek/email.txt
# Maak een lijst van de gebruikers die zijn ingelogd
echo "Gebruikers die momenteel zijn ingelogd:" >> /home/geek/email.txt
wie >> /home/geek/email.txt
# Lijst die momenteel bezig is met processen
echo "Actieve processen:" >> /home/geek/email.txt
ps -e >> /home/geek/email.txt
# Stuur de e-mail
cat /home/geek/email.txt | mail -s "Dagelijkse serverinformatie" [email protected]
# Verwijder het bestand dat we hebben gemaakt
rm /home/geek/email.txt
Uiteraard kun je veel meer diepgang krijgen met je script en zelfs de opmaak een beetje mooier maken, maar dit is hoe de uitvoer eruit ziet in onze e-mail:
Nu het script is geschreven en getest, kunnen we cron gebruiken om het automatisch elke dag op hetzelfde tijdstip automatisch uit te voeren. In dit voorbeeld configureren we de e-mail die elke ochtend om 2:00 uur wordt verzonden, zodat we de gegevens later die dag kunnen doornemen.
$ crontab -e
Voeg voor e-mails van 2:00 AM toe:
0 2 * * * /home/geek/script.sh
We hebben een heel artikel over crontab-bestanden geschreven als je meer hulp nodig hebt met dit onderdeel.
Geautomatiseerde e-mails in Windows
Het verzenden van e-mails op de opdrachtregel is mogelijk via PowerShell, maar we hebben ontdekt dat het implementeren van deze functionaliteit een stuk eenvoudiger is met apps van derden, vooral wanneer u Gmail gebruikt. SendEmail is een gratis programma beschikbaar voor Windows dat integratie met Windows Task Scheduler en Gmail een fluitje van een cent maakt. Klik op de bovenstaande link om de nieuwste versie te downloaden en zorg ervoor dat u de door TLS ondersteunde versie haalt.
Nadat je SendEmail hebt gedownload, pak je het zipbestand uit en plaats je de inhoud ergens waar je ze kunt opslaan zolang je van plan bent geautomatiseerde e-mails te verzenden. In dit voorbeeld bewaren we het programma gewoon in C: \ SendEmail
Laten we SendEmail testen om snel een idee te krijgen hoe het werkt. Open een opdrachtprompt door cmd in het menu Start of Run (Ctrl + R) te typen.
Terwijl de opdrachtprompt is geopend, gebruikt u de opdracht change directory om naar de locatie te gaan waar u de SendEmail-bestanden hebt opgeslagen.
cd C: \ SendEmail
Nu kunnen we proberen een testmail te sturen met de volgende opdracht:
sendEmail -f [email protected] -t [email protected] -s smtp.gmail.com:587 -xu gebruikersnaam -xp wachtwoord -u "Onderwerp van e-mail testen" -m "Dit is een testmail."
Vervang duidelijk "gebruikersnaam" en "wachtwoord" met uw accountgegevens voordat u de opdracht uitvoert.
Dit is wat de bovenstaande opdracht feitelijk doet:
sendEmail
voert het programma uit.
-f
- van adres
-t
- adresseren
-s
- SMTP-server
-xu
- account gebruikersnaam
-xp
- account wachtwoord
-u
- e-mail onderwerp
-m
- e-mail bodytekst
Controleer uw inbox om te controleren of u de test-e-mail hebt ontvangen, en dan kunnen we verder gaan met het schrijven van een script dat ons serverinformatie zal sturen.
Een script schrijven voor de e-mails
Om het meeste uit ons script te halen, gaan we het voor PowerShell schrijven. Open Windows PowerShell ISE door powershell_ise.exe in een Run-prompt in te voeren (Ctrl + R).
Aan de rechterkant van het PowerShell ISE-venster kunt u elke opdracht weergeven die PowerShell kan uitvoeren. Dit zou u een goede start moeten geven bij het genereren van de soorten informatie die u moet melden. In uw script kunt u ook programma's van derden aanroepen om informatie uit te voeren (dat wil zeggen, SendEmail is een app van derden, maar PowerShell en cmd kunnen het gebruiken om taken uit te voeren die zij normaal niet kunnen uitvoeren).
Voor ons voorbeeldscript controleren we het huidige schijfgebruik van de C-schijf, tonen de momenteel lopende processen en tonen alle bestanden die momenteel worden gedeeld via het netwerk.
# Controleer de ruimte op de harde schijf
echo "C: Drive Usage:"> C: \ SendEmail \ info.txt
Get-WmiObject win32_LogicalDisk -Filter "DeviceID = 'C:'" | Selecteer-objectgrootte, FreeSpace >> C: \ SendEmail \ info.txt
# Lijst die momenteel bezig is met processen
echo "Actieve processen:" >> C: \ SendEmail \ info.txt
get-process >> C: \ SendEmail \ info.txt
# Maak een lijst van de bestanden / mappen die momenteel worden gedeeld
echo "SMB-shares:" >> C: \ SendEmail \ info.txt
get-smbshare >> C: \ SendEmail \ info.txt
# Stuur de e-mail
type C: \ SendEmail \ info.txt | C: \ SendEmail \ sendEmail -f [email protected] -t [email protected] -s smtp.gmail.com:587 -xu gebruikersnaam -xp wachtwoord -u "Dagelijkse serverinfo"
# Verwijder het bestand dat we hebben gemaakt
rm C: \ SendEmail \ info.txt
In dit script wordt verschillende informatie uitgevoerd naar C: \ SendEmail \ info.txt, waarna de tekst in dat document naar ons wordt gemaild voordat deze wordt verwijderd. Sla je script op met een PS1-bestandsextensie (PowerShell-bestand).
Nadat uw script is voltooid, voert u een snelle test uit vanaf een prompt uitvoeren om te controleren of deze correct werkt.
Gebruik gewoon de powershell
commando met een -het dossier
argument en specificeer het pad naar uw script.
powershell -file "c: \ SendEmail \ daily-email.ps1"
Controleer uw inbox om te controleren of u de e-mail hebt ontvangen - zo niet, kijk dan in uw script voor syntaxisfouten. Dit is wat de gegenereerde e-mail van ons voorbeeldscript eruitziet:
Je kunt spelen met de opmaak (zoals het echoën van lege regels tussen tekst) om het mooier op je apparaat weer te geven, of beter nog, je kunt een programma van derden gebruiken dat de benodigde informatie in een beter leesbare indeling dan Windows doet ( het scriptingproces zal nog steeds hetzelfde zijn).
Zodra u de knikken in uw script hebt uitgewerkt, kunt u Windows Taakplanner gebruiken om het te automatiseren. Open Windows Task Scheduler via het menu Start.
Open de Taakplanner en selecteer Actie> Basistaak maken.
Geef deze taak een naam als "Dagelijks e-mailscript" en klik op Volgende. Selecteer in het volgende scherm de frequentie waarmee u uw e-mailscript wilt uitvoeren, waarschijnlijk dagelijks. Kies vervolgens de tijd waarop het script moet worden uitgevoerd en klik op Volgende.
Nu zou je in het "Actie" deel van de wizard moeten zijn, selecteer "Start een programma" en voer dezelfde tekst in die we eerder in de Run prompt hadden ingevoerd om ons script te testen.
Druk op Volgende en klik vervolgens op Ja in dit venster:
Klik op Finish in het laatste menu en u bent klaar met het plannen van uw automatische e-mails.