如何自动生成和发送计算机统计信息
每天检查服务器上的各种日志数据和统计信息很重要,但是它变得很繁琐。每天收到一封包含所有重点内容的电子邮件不是很好,所以我们甚至不需要上服务器来检查问题?本指南将向我们展示如何在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
寻址
-s
SMTP服务器
-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。
在任务计划程序打开的情况下,选择操作>创建基本任务。
将该任务命名为"每日电子邮件脚本",然后单击"下一步"。在下一个屏幕上,选择我们可能希望每天运行电子邮件脚本的频率。然后,选择我们希望脚本运行的时间,然后单击下一步。
现在,我们应该在向导的"操作"部分,选择"启动程序",然后输入我们之前在"运行"提示中输入的相同文本来测试脚本。
单击下一步,然后在此窗口上单击是:
在最后一个菜单上单击"完成",就可以完成对自动电子邮件的计划了。