如何自动生成和发送计算机统计信息

时间:2020-01-09 10:38:56  来源:igfitidea点击:

每天检查服务器上的各种日志数据和统计信息很重要,但是它变得很繁琐。每天收到一封包含所有重点内容的电子邮件不是很好,所以我们甚至不需要上服务器来检查问题?本指南将向我们展示如何在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

通过以下更改来编辑文件(可以安全地删除文件中的所有文本,并根据需要复制/粘贴这些设置):

# This address will receive the emails, so enter your own email here if you want to receive them.
[email protected]
# Specify the email server here (leave as is if you’re using Gmail).
mailhub=smtp.gmail.com:587
# The domain name that the mail will come from.
rewriteDomain=gmail.com
# The email address that these emails should be from.
[email protected]
# SSL/TLS settings, required for Gmail and most other mail servers.
UseTLS=Yes
UseSTARTTLS=Yes
# The username and password to your Gmail account.
AuthUser=username
AuthPass=password
# Allow the ability to specify a from address different than the one above.
FromLineOverride=yes

当我们完成文件编辑后,由于Gmail密码以纯文本格式存储,我们将需要更改权限。

$ sudo chmod 640 /etc/ssmtp/ssmtp.conf
$ sudo chown username.username /etc/ssmtp/ssmtp.conf

让root成为文件的所有者总是更安全,但是随后我们将不得不在脚本中使用sudo命令,这将提示我们输入密码,从而破坏了使整个过程自动化的目的。

如果我们使用共享服务器,并且担心密码以明文形式存储并可由root读取,请创建一个一次性的Gmail帐户或者使用不需要任何身份验证的电子邮件服务器。

为确保所有配置均正确无误,请尝试发送测试电子邮件:

$ echo "Testing" | mail -s "Testing mail setup" [email protected]

测试将在电子邮件的正文中进行,主题将为"测试邮件设置"。检查电子邮件以确保已收到。

为电子邮件编写脚本

现在可以从命令行发送电子邮件了,让我们编写一个脚本,向我们发送有关系统的一些基本信息。

#!/bin/bash
# Check hard drive space
echo "Hard drive space:" > /home/data/email.txt
df -h >> /home/data/email.txt
# List the users that are logged in
echo "Users currently logged in:" >> /home/data/email.txt
who >> /home/data/email.txt
# List currently running processes
echo "Running processes:" >> /home/data/email.txt
ps -e >> /home/data/email.txt
# Send the email
cat /home/data/email.txt | mail -s "Daily server information" [email protected]
# Delete the file we created
rm /home/data/email.txt

显然,我们可以对脚本进行更深入的了解,甚至可以使格式化更好一些,但这就是我们的电子邮件中的输出内容:

现在已经编写并测试了脚本,我们可以使用cron在每天的同一时间自动执行它。在此示例中,我们将电子邮件配置为每天早上2:00 AM发送,因此我们可以在当天晚些时候浏览数据。

$ crontab -e

对于2:00 AM电子邮件,请添加:

0 2 * * * /home/data/script.sh

Windows中的自动电子邮件

通过PowerShell可以在命令行中发送电子邮件,但是我们发现,使用第三方应用程序实现此功能要容易得多,尤其是在使用Gmail时。 SendEmail是可用于Windows的免费程序,可轻松与Windows Task Scheduler和Gmail集成。单击上面的链接下载最新的副本,并确保我们获取TLS支持的版本。

下载SendEmail后,解压缩该zip文件并将其内容放置在可以存储它们的地方,只要我们打算发送自动电子邮件即可。在此示例中,我们将程序存储在C:\ SendEmail中

让我们测试一下SendEmail,以快速了解它的工作方式。在"开始"或者"运行"(Ctrl + R)菜单中键入cmd,以打开命令提示符。

打开命令提示符后,使用change directory命令导航到存储SendEmail文件的位置。

cd C:\SendEmail

现在,我们可以尝试使用以下命令发送测试电子邮件:

sendEmail -f [email protected] -t [email protected] -s smtp.gmail.com:587 -xu username -xp password -u "Test email subject" -m "This is a test email."

显然,在执行命令之前,请使用帐户凭据替换用户名和密码。

这是上面的命令实际执行的操作:

sendEmail执行程序。

地址中的-f

-t寻址

-sSMTP服务器

-xu帐户用户名

-xp帐户密码

-u电子邮件主题

-m电子邮件正文

检查收件箱以确保我们收到测试电子邮件,然后我们可以继续编写脚本以向我们发送服务器信息。

为电子邮件编写脚本

为了充分利用脚本,我们将为PowerShell编写脚本。通过在运行提示(Ctrl + R)中键入powershell_ise.exe来打开Windows PowerShell ISE。

在PowerShell ISE窗口的右侧,我们可以列出PowerShell能够执行的每个命令。这应该为我们生成所需报告的信息类型提供一个良好的开端。在脚本中,我们还可以调用第三方程序来输出信息(即,SendEmail是第三方应用程序,但是PowerShell和cmd可以使用它来完成通常无法执行的任务)。

对于我们的示例脚本,我们将检查C驱动器的当前磁盘使用情况,显示当前正在运行的进程,并显示当前正在通过网络共享的所有文件。

# Check hard drive space
echo "C: Drive Usage:" > C:\SendEmail\info.txt
Get-WmiObject win32_LogicalDisk -Filter "DeviceID='C:'" | Select-Object Size,FreeSpace >> C:\SendEmail\info.txt
# List currently running processes
echo "Running processes:" >> C:\SendEmail\info.txt
get-process >> C:\SendEmail\info.txt
# List the files/folders currently being shared
echo "SMB shares:" >> C:\SendEmail\info.txt
get-smbshare >> C:\SendEmail\info.txt
# Send the email
type C:\SendEmail\info.txt | C:\SendEmail\sendEmail -f [email protected] -t [email protected] -s smtp.gmail.com:587 -xu username -xp password -u "Daily server info"
# Delete the file we made
rm C:\SendEmail\info.txt

在此脚本中,各种信息将输出到C:\ SendEmail \ info.txt,然后将该文档中的文本通过电子邮件发送给我们,然后再将其删除。使用ps1文件扩展名(PowerShell文件)保存脚本。

脚本完成后,从"运行"提示运行快速测试以确保其正常运行。

只需将powershell命令与-file参数一起使用,并指定脚本的路径即可。

powershell -file "c:\SendEmail\daily-email.ps1"

检查收件箱,确保没有收到电子邮件,查看脚本中的语法错误。这是从我们的示例脚本生成的电子邮件的样子:

我们可以尝试使用格式设置(例如在文本之间回显空白行)以使其在设备上更好地显示,或者更好的是,我们可以使用第三方程序以比Windows更可读的格式输出所需的信息(脚本编写过程将仍然相同)。

解决了脚本中的问题后,就可以使用Windows Task Scheduler将其自动化。通过"开始"菜单打开Windows Task Scheduler。

在任务计划程序打开的情况下,选择操作>创建基本任务。

将该任务命名为"每日电子邮件脚本",然后单击"下一步"。在下一个屏幕上,选择我们可能希望每天运行电子邮件脚本的频率。然后,选择我们希望脚本运行的时间,然后单击下一步。

现在,我们应该在向导的"操作"部分,选择"启动程序",然后输入我们之前在"运行"提示中输入的相同文本来测试脚本。

单击下一步,然后在此窗口上单击是:

在最后一个菜单上单击"完成",就可以完成对自动电子邮件的计划了。