我需要帮助来创建脚本将运行一天一次下午收集各分区的信息(磁盘空间,总计和已用) 并将其发送到我的电子邮箱。
请帮助我,我对这个脚本非常陌生。
答案1
为了使脚本运行,您需要设置一个 cron 作业:如何设置 cronjob?
现在,在你的脚本中,你需要执行如下操作:
#!/bin/bash
#script that simply saves the output of df -h to an output file
#which is sent as an attachment to an e-mail
#a) save the output of the command:
temp_file=$(mktemp)
df -h > $temp_file 2> /dev/null
/root/email.py [email protected] "Title here" "Body here. The current date and time is $(date)" "$temp_file"
sleep 3
rm -rf $temp_file
正如你所见,我从你的根路径中调用了一个 python 脚本(不可读,但除了 root 本人之外没有其他人可以读取),它采用以下参数:
“收件人电子邮件” “电子邮件标题” “电子邮件正文” “附件”
这个python脚本是这样的:
#!/usr/bin/python
import os, re
import sys
import smtplib
from email import encoders
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email.MIMEText import MIMEText
SMTP_SERVER = 'smtp.gmail.com'
SMTP_PORT = 587
sender = '[email protected]'
password = "yourpasswordhere"
recipient = sys.argv[1]
subject = ''
message = sys.argv[3]
def main():
msg = MIMEMultipart()
msg['Subject'] = sys.argv[2]
msg['To'] = recipient
msg['From'] = sender
part = MIMEText('text', "plain")
part.set_payload(message)
msg.attach(part)
session = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
session.ehlo()
session.starttls()
session.ehlo
session.login(sender, password)
fp = open(sys.argv[4], 'rb')
msgq = MIMEBase('audio', 'audio')
msgq.set_payload(fp.read())
fp.close()
# Encode the payload using Base64
filename=sys.argv[4]
msgq.add_header('Content-Disposition', 'attachment', filename=filename)
msg.attach(msgq)
# Now send or store the message
qwertyuiop = msg.as_string()
session.sendmail(sender, recipient, qwertyuiop)
session.quit()
os.system('notify-send "Your disk space related email has been sent."')
if __name__ == '__main__':
main()
当然,你需要提供你的邮箱电子邮件和密码位于脚本顶部(sender
和password
变量)。如果您安装了该libnotify-bin
包,那么如果电子邮件已成功发送,您将收到桌面通知。
因此,总结一下,你需要使用上面的命令设置一个 cron 任务狂欢脚本。这狂欢脚本将保存临时文件中的输出df -h
,该文件将通过Python脚本发送到您选择的收件人电子邮件(据我记得,发件人电子邮件必须是 Gmail)。
PS:上述解决方案将仅显示已安装文件系统的可用和总磁盘空间。如果这是个问题,请通知我,以便我扩展关于如何自动安装所有可用文件系统然后运行的答案df -h
。
答案2
假设您已在该机器上配置了 MTA 来为您接收和中继邮件(在服务器上应该是这种情况)试试这个:
$ df -h | mail -s "Filesystem usage report for `hostname`" [email protected]
(MTA = Postfix、Exim 等)
如果符合您的需求,请将其添加到您的定时任务每天运行:
$ crontab -e
将打开一个编辑器。添加如下行:
@daily df -h | mail -s ...
保存并关闭。
这将使其与其他日常任务一起运行。如果您需要一天中特定时间的报告或将错误记录到特定地址,请阅读有关 cron 语法的信息(互联网上有很多此类信息 -这里的一个随机网站)。例如:
[email protected]
# at 5 a.m every day:
0 5 * * * mycommand
如果你无法直接在该机器上发送邮件,请阅读这或者@hakermania 关于如何做到这一点的回答(还有更多方法)。
答案3
您可以使用此脚本来检查磁盘使用情况
#!/bin/bash
limit=85
[email protected]
host=`hostname`
out=`df -k | grep "^/dev" | awk '{ if($5 > $limit) print "\nDisk space is critial on " $1,$5,$6 "\n"}'`
usr/bin/mail -s "Disk Space Alert on $host: $out" $email
用于cron
使脚本自动运行。在线查看cron 生成器帮助您进行设置。