我编写了这个脚本来自动化我不同服务器之间的 wget,并将结果输出到日志文件,然后通过电子邮件将它们发送给我。我分享这个的部分原因是为了让其他人可以自己使用这个解决方案。
我已将文件放在 cron.weekly 中,因此它每周都会向我发送电子邮件。
顺便提一句。我是一个绝对的新手,这是我从这个网站学习编写的第一个脚本。
脚本如下:我也做了一些小评论。
#!/bin/sh
#wget -verbose -tries -timeout -dontcreatedirectories -dontsaveanything http://x output text to file
# automating apt-get update and upgrade so it runs weekly
apt-get update
apt-get upgrade -y
# this is where the logs will be stored
cd /var/log
# create a tmp file and if it is left behind from earlier results, empty it out
echo -e "\n" > wget.tmp
# these are the header texts for the results
echo "***************" >> $(hostname -s)"-wget-SUMMARY-"$(date "+%b%d_%Y" | tr A-Z a-z).log
echo "WGET SCHEDULES" >> $(hostname -s)"-wget-SUMMARY-"$(date "+%b%d_%Y" | tr A-Z a-z).log
echo "***************" >> $(hostname -s)"-wget-SUMMARY-"$(date "+%b%d_%Y" | tr A-Z a-z).log
# this will make note of the time the tests are started
date "+START OF WGETS SCHEDULE at %c" >> $(hostname -s)"-wget-SUMMARY-"$(date "+%b%d_%Y" | tr A-Z a-z).log
echo "\n" >> $(hostname -s)"-wget-SUMMARY-"$(date "+%b%d_%Y" | tr A-Z a-z).log
echo "\n" >> $(hostname -s)"-wget-SUMMARY-"$(date "+%b%d_%Y" | tr A-Z a-z).log
# up to 10 servers to wget from
echo "Server #1" >> $(hostname -s)"-wget-SUMMARY-"$(date "+%b%d_%Y" | tr A-Z a-z).log
wget -v -r -t 2 -T 7 -nd -O /dev/null http://servername/file 2>> wget.tmp
grep -i 'Length\|connect\|100%\|saved\|failed\|Error' wget.tmp >> $(hostname -s)"-wget-SUMMARY-"$(date "+%b%d_%Y" | tr A-Z a-z).log
rm -f wget.tmp
echo "\n" >> $(hostname -s)"-wget-SUMMARY-"$(date "+%b%d_%Y" | tr A-Z a-z).log
. 一直持续到 。
echo "Server #10" >> $(hostname -s)"-wget-SUMMARY-"$(date "+%b%d_%Y" | tr A-Z a-z).log
wget -v -r -t 2 -T 7 -nd -O /dev/null http://servername/file 2>> wget.tmp
grep -i 'Length\|connect\|100%\|saved\|failed\|Error' wget.tmp >> $(hostname -s)"-wget-SUMMARY-"$(date "+%b%d_%Y" | tr A-Z a-z).log
rm -f wget.tmp
echo "\n" >> $(hostname -s)"-wget-SUMMARY-"$(date "+%b%d_%Y" | tr A-Z a-z).log
# record the end time of tests
echo "***************" >> $(hostname -s)"-wget-SUMMARY-"$(date "+%b%d_%Y" | tr A-Z a-z).log
date "+END OF WGETS SCHEDULE at %c" >> $(hostname -s)"-wget-SUMMARY-"$(date "+%b%d_%Y" | tr A-Z a-z).log
#mail results to yourself
echo "Subject: $(hostname -s| tr a-z A-Z)" Wget Results v.2.0 Sendmail "$(date +%x)" ---- "$(date "+%A")" "$(date "+%X") ("$(date "+%Z")") ::: Week "$(date "+%V")" """ | cat - $(hostname -s)"-wget-SUMMARY-"$(date "+%b%d_%Y" | tr A-Z a-z).log | /usr/lib/sendmail -t myemailaddress@host.x
理想情况下,我不想将自己限制在 x # 台服务器上,但只要文件 servers.list 中有文本(通过在文件名中包含“.”,我就可以将其存储在 cron.weekly 中并且不会被处理)。所以对于每台服务器,写服务器#,处理wget,输出到文件,grep到日志文件。最好将 servers.list 文件格式化
hostname filename store/to
.
.
hostname filename store/to
例子:
msn.robots.ua 100mb.test /dev/null
justme.cov ratings.xlsx /srv/storage/latest
邮件看起来像
主题:服务器名 Wget 结果 v.2.0 Sendmail 09/09/12 ---- 星期日 04:59:21 (MSK) ::: 第 36 周
WGET 时间表
WGETS 开始时间为 2012 年 9 月 9 日星期日 04:52:00
服务器 #1 连接到 xxx.xxxxxx.com|ip.ip.ip.ip|:80... 已连接。长度:104857600 (100M) [text/plain] 102350K ......................................................................................................... .. ..........100% 5.73M 0s 102400K 100% 0.00 =25s 2012-09-09 04:52:27 (4.07 MB/s) - `/dev/null' 已保存 [104857600/ 104857600]。.
WGETS 计划于 2012 年 9 月 9 日星期日 04:59:21 结束
因此,我的 /var/log 最终将诸如 wordpress-wget-SUMMARY-sep24_2012.log 之类的文件存储为示例文件名。问题是维护它正在成为一个问题,服务器发生变化,所以我想只更新一个位置的服务器列表,让他们自己处理。在执行之前,它将下载新的 servers.list 并完成其余的工作。
邮件工作输出到日志文件工作正常,一切正常,只需要一点点调整。
泰!泰!Ty 阅读。