PhantomJSでレスポンスタイムを取得しGrowthForecastに投げるときのShellScript
PhantomJSは前回の記事のようにインストールしている前提。Pathは適宜書き換えて下さい。
-
-
-
-
-
-
-
-
-
-
-
- 追記(2013/02/28)
-
-
-
-
-
-
-
-
-
-
PhantomJSを素で使うとサイトなどが重すぎるときにそのままプロセスを保持し続けて、次のcronのときと被って被ってプロセスが膨張してサーバーごと死ぬとかあるので、タイムアウトを導入しました。
ちなみにPhantomJS自体にはまだtimeoutの概念がなかったようなのと、自分のJS力が低かったのもあってphantomjsコマンドを実行するShellScript側でtimeoutしたら殺すようにしました。
実装とは言っても単純にtimeoutコマンドを使うだけです。
もし入ってない場合は以下より入ります。
yum install netatalk
そしてphantomjsを叩くときに以下のようにすればOKです。
timeout 10 phantomjs loadspeed.js {URL}
-
-
-
-
-
-
-
-
-
-
-
- 追記終わり
-
-
-
-
-
-
-
-
-
-
/root/phantomjs/phantom_batch.sh
#!/bin/sh SERVICE_NAME=(hateblo google facebook) URL_hoteblo=http://kazuph.hateblo.jp URL_google=https://www.google.co.jp URL_facebook=https://www.facebook.com for key in ${SERVICE_NAME[@]}; do echo $key url=$(eval 'echo $URL_'$key) echo $url # 30秒でタイムアウトするようにする msec=`timeout 30 /usr/local/bin/phantomjs /root/phantomjs/loadspeed.js $url` echo $msec curl -F number=$msec http://example.growthforecast.com/api/orega_tukatteiru_service/${key}/response_time done
/etc/crontab
# test phantomjs batch */5 * * * * root /bin/bash /root/phantomjs/phantom_batch.sh >>/var/log/phantomjs/batch.log 2>>/var/log/phantomjs/errlog.log
なんだろう、このだめだめな感じは・・・。
まずShellでの配列の使い方全然あれな感じで。
追記(2013/02/20)
あれ、そういえば
/root/phantomjs/loadspeed.js
の内容を書いてなかった(汗
基本的にはexampleにあるソースとほぼ一緒です。
var page = require('webpage').create(), system = require('system'), t, address; if (system.args.length === 1) { console.log('Usage: loadspeed.js <some URL>'); phantom.exit(1); } else { t = Date.now(); address = system.args[1]; page.open(address, function (status) { if (status !== 'success') { console.log('FAIL to load the address'); } else { t = Date.now() - t; console.log(t); } phantom.exit(); }); page.onError = function(msg, trace) { }; }