ツイート収集その後(運用へ)
Twitter Streaming APIでのストリーミング切断
ツイート収集スクリプトが止まってしまう件は、tweetstreamの中でリコネクトできないというようなエラー表示でした。その後も同様に停止したのですが、3時に開始したものが5:39に停止していたので、長時間接続していると切ってくるというわけではないっぽいです。
うっかりterminalを閉じてしまったので、ちゃんとエラーメッセージを見られないんですけどね……。
エラーで停止した場合の対応はcronで再起動
Rubyスクリプト内でハンドリングするというのも手ですが、cronでプロセスを確認して、起動していなかったら起動するというのがお手軽でしょう。
無駄な労力は使わない主義です。ちゃっちゃとRubyスクリプトを書く能力がないとも言う。;(
とは言え、cronの設定なんてこの5年くらいはやった記憶がありません。もしかしたら10年近くやったことがないかも。
そんなわけで、Googleさん頼りです。いろいろ網羅的に面倒臭いことが書いてあるページが多かったのですが、ごく単純にcrontabコマンドを-e付きで呼べばエディタを選べるようになっていたので、僕の場合はvim.tinyの3番を選んで、テーブルを編集、と。
$ crontab -e no crontab for sugiyama - using an empty one Select an editor. To change later, run 'select-editor'. 1. /bin/ed 2. /bin/nano <---- easiest 3. /usr/bin/vim.tiny Choose 1-3 [2]: 3
編集画面では最後に1行追加。
*/15 * * * * ~sugiyama/foo/twstream_check.sh
これは15分ごとに1回、この「~sugiyama/foo/twstream_check.sh」ってシェルスクリプトを動かすってことで。
プロセスチェックしてプロセス起動する
このシェルスクリプトも深く考えないでイイカゲンな感じで書きました。もっとイイ感じでさらに簡単にできる気もするんですけど、動けばいいや……。
#!/bin/sh proccnt=`/bin/ps -ef|grep twstream.rb|grep -v grep|wc -l` if [ $proccnt -eq 0 ]; then ~sugiyama/foo/twstream.rb >/dev/null 2>&1 & echo restarted twstream.rb at `date`. fi
最近胃カメラに初挑戦して胃潰瘍跡が見つかったので、ストレスは溜めないようにしています。胃潰瘍を患っていたとは気付いていませんでしたが、たぶん10年前に血を吐きながらSE稼業をしていた頃のものでしょう。つらい時代でした。いまならもうちょっとうまく立ち回れるような気もしますが、それはさておき。
プロセス一覧から該当Rubyスクリプトをgrepで抽出して、wcで行カウントし、0行ならプロセス起動、と。UNIX系初心者でもだいたいわかりますね。僕は20年くらいUNIX初心者のままです。;)
あ、あと、echoでの英語メッセージもおかしいですよね、たぶん。でも、日本人ならわかってくれるに違いない。てか、僕はわかるからいいんです。
cronによる再起動結果をメールで受け取れるように設定
cronで動かしたスクリプトからの標準出力は(上記echoのメッセージ)は(デフォルトでは)メールでcrontab設定者に送られます。
でも、うちのUbuntuでメールってどうなってるんだ?
ってことで、「mail」と入力してみました。
$ mail プログラム 'mail' は以下のパッケージで見つかりました: * heirloom-mailx * mailutils 次の操作を試してください: sudo apt-get install <選択したパッケージ>
いまどきのLinuxは親切で驚きました。こんなことまで指南してくれるのですね。mailutilsを導入してみました。apt-get installしたら、そのまま設定画面が開きました。ローカルでの運用なのでとくに難しいこともなく、言われるがままに設定。
$ mail Cannot open mailbox /var/mail/sugiyama: 許可がありません No mail for sugiyama
お、なんかショボいエラーが出ている。
パーミッションを手作業でいじるってのもなんかおかしいし、一発メールを送ってみます。
$ mail sugiyama Cc: Subject: hoge hogehoge
送れたっぽいです。
$ mail "/var/mail/sugiyama": 1 message 1 new >N 1 SUGIYAMA Fri Dec 16 06:37 13/412 hoge ? 1 Return-Path: <sugiyama@xxx.com> X-Original-To: sugiyama@bar Delivered-To: sugiyama@bar Received: by bar (Postfix, from userid 1000) id 9BEA912033F; Fri, 16 Dec 2011 06:37:26 +0900 (JST) To: <sugiyama@bar> Subject: hoge X-Mailer: mail (GNU Mailutils 2.2) Message-Id: <20111215213726.9BEA912033F@bar> Date: Fri, 16 Dec 2011 06:37:26 +0900 (JST) From: sugiyama@xxx.com (SUGIYAMA) hogehoge ? d ? q
いい感じです。
試しにcronで動くシェルスクリプトをいじって、正常な場合でも標準出力に出力するようにしてみたところ、正しくメールが届きました。
ツイート収集の運用は、趣味でやる分にはこんな感じで充分かな。