特定のリモート客先マシンから、(あるURLに)httpアクセスした結果のソースを常時ローカルホストのどこかにタイムスタンプ順に貯めておきたい…という用途で、作った シェルスクリプト。

決まった時間ごとに(cronを使って)環境変数を吐きださせるページにアクセスさせて、そのソースをストアしておくことにより、環境変数(とくに Global IP アドレス )の変化をモニターすることをイメージした。

※ IPアドレスの行だけを取り出すとかは、grep を使うとかであとでなんとでも

※ ため込む先を Dropbox 内とかにすると、当該 Dropbox アカウントを使うすべてのマシンに同様に蓄積されるので便利かも

※ cron で回すのが前提(cron が標準出力を持たないので、そこんとこ考慮済み)

こんな感じ↓

  1. wget をインスコしておく (下記例ではインスコ先は、/usr/local/bin/wget )
  2. 環境に合わせてカギ括弧([])内を書き換える(カギ括弧自体は不要)
  3. 適当な名前で、実行権限をつけて保存
  4. crontab -e で cron で回す

※ 下記例では、   (myPREFIX=hogeで、タイムスタンプ 2013/08/27 16:20:10の場合) hoge130827162010.txt というファイル名で、ローカルホストのTARGET_DIR 内に、wget の結果ソース全体が保存される。

==============

#!/bin/bash

FILE=$(mktemp -t temp [フォルダ内に生成されるファイルの接頭文字列])

/usr/local/bin/wget [URLテキスト] --output-document="$FILE"

HOST=[scpの宛先ホスト名 or IPアドレス]

USER=[ユーザー名]

PASS=[パスワード]

TARGET_DIR=[/Volumes/から始まるパス名(最後は スラッシュ付き)]

myPREFIX=[scpされるファイルの接頭文字列]

expect -c "

set timeout 10

spawn scp "$FILE" ${USER}@${HOST}:${TARGET_DIR}${myPREFIX}date +%y%m%d%H%M%S.txt

expect {

\" Are you sure you want to continue connecting (yes/no)? \" {

send \"yse\r\"

expect \"password:\"

send \"${PASS}\r\"

} \"Password:\" {

send \"${PASS}\r\"

}

}

expect {

\"denied\" { exit 2 } \

eof { exit 0 }

}

"

echo "$FILE"