このスクリプトを作成して、異なるサーバーからの wget を相互に自動化し、結果をログ ファイルに出力してメールで送信しました。これを共有する理由の 1 つは、他の人が自分でソリューションを使用できるようにするためです。
ファイルを 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
メールは次のようになります
件名: Servername Wget Results v.2.0 Sendmail 09/09/12 ---- 日曜日 04:59:21 (MSK) ::: 第 36 週
WGETスケジュール
2012 年 9 月 9 日 04:52:00 の WGETS スケジュールの開始
サーバー #1 xxx.xxxxxx.com|ip.ip.ip.ip|:80 に接続しています... 接続されました。長さ: 104857600 (100M) [テキスト/プレーン] 102350K .. ..........100% 5.73M 0s 102400K 100% 0.00 =25s 2012-09-09 04:52:27 (4.07 MB/s) - `/dev/null' 保存 [104857600/ 104857600] . .
2012 年 9 月 9 日 04:59:21 の WGETS スケジュールの終了
したがって、私の /var/log は、例のファイル名として wordpress-wget-SUMMARY-sep24_2012.log などのファイルを保存することになります。問題はそれが問題になりつつあり、サーバーが変更されることを維持することです。そのため、サーバーリストを1か所で更新し、それらをすべて自分で処理できるようにしたいと思います。実行前に新しいservers.listをダウンロードし、残りは完了です。
メールは機能しており、ログ ファイルへの出力は機能しており、すべて機能しており、微調整が必要なだけです。
タイ!タイ!読むためのタイ。