ふぁメモ

主に技術系のメモをしたいけどやっぱり適当日記。たまにPHPコード載ってるけどメモ書き程度のスクリプトなのでそのまま使っちゃダメ。

ARecX6の監視

ARecX6とは24時間ワンセグ野郎ワンセグ全録マシンである。
www.arecx6.jp

詳細はレビューを見てほしい。自分で書いたやつもある。
http://www.amazon.co.jp/gp/customer-reviews/R1Y5POIKUHGRM8/ref=cm_cr_pr_rvw_ttl?ie=UTF8&ASIN=B003OOZBLM

わりと便利ではあるのだけど、しょっちゅう止まってしまうのである。
気付いたらすぐ再開出来るのだけど、毎日は見ないので、あ、これはARecX6の出番!と思った時に止まっているととても悲しいのである。
せめて1日以上止まっていることはないように死活監視を入れたいなあ、と、ふと思い立った。作ればいいじゃない。

以前VPSのサービスのチェックをするために作ったやつを流用して…と思ったら自宅鯖からメールが送れない。はて。確かに今までメールを送る必要のあるサービスを自宅鯖に入れたことはなかったが…。postfix入れただけじゃダメぽい。調べるとDNS逆引きがどうのOP25Bがどうのとあるけれど、要するに固定IPじゃない環境でメールを送信するには外部のSMTPサーバを利用しなくてはならないし、そのためにはOP25Bを突破しなくてはならない上にSMTP認証を突破しなくてはならないわけだ。
PHPSMTP認証するのはPEARのライブラリであるんだけどすごい面倒だった気がする。

WindowsPHPだったらsendmane.exeを使うのがラクチン。
http://homepage1.nifty.com/yito/anhttpd/faq/sendmane.html
http://xoops.hypweb.net/modules/mydownloads/singlefile.php?cid=1&lid=1
でもWindowsはタスクに登録して定期的に実行とかちょっと面倒なのである。
自鯖Ubuntuでやりたい。
ググった。
php から確実にメール送信(Qdmail使用、SMTP経由) - Qiita
PHP高機能日本語メール送信ライブラリ・文字化けフリー - Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte
そういえばこんなのあったなあ…。
さっそく導入してみようとしたものの、エラーが出て動かない。さすがにもう更新されてないみたいだし古すぎたか…。
日本語はダメらしいがqdsmtp単体でならちょっと修正したら動いた感。別に日本語いらないから問題ないね。いやもちろん古いスクリプトには脆弱性があったりする別の問題があるかもしれないけどそこはそれで。
よし、これで。

ちなみにArecX6の死活監視は
/cgi/get.cgi?type=top&d=(randam数字6桁)
にアクセスしてTOPページのデータを引っ張って来て、
status,1
だったら録画中なのでそこをチェックすればいいだけである。
もちろん同じネットワークのマシンからね。WAN側からのポートマッピングで見えるかどうかは確認していない。

#!/usr/bin/php
<?php
/*
てきとうスクリプト

# m h  dom mon dow   command
0 5,12,17,23 * * * ~/arecx6_alerter.php > /dev/null  2>&1
*/

	$basedir = '/var/www/hogehoge/';

	//require_once($basedir.'qdmail.php');
	require_once($basedir.'qdsmtp.php');
	$server = '192.168.0.xxx';
	$smtpserver = 'xxx.xxxx.xxx';
	$smtpuser = 'xxxx';
	$smtppass = 'xxxx';
	$to = 'xxxx@xxxx.xxx';
	$subject = '[ARecX6] perhaps service is down';
	$fromaddress = 'smtpuser@hogehoge.hoge';
	$header = "From: ARecX6 <${fromaddress}>"."\n".'Content-Type: text/plain; charset="UTF-8"';
	$path = 'http://'.$server.'/cgi/get.cgi?type=top&d='.sprintf("%06d",rand(0,999999));
	$res = file_get_contents($path);
	$output = date("Y/m/d H:i:s");
	if (preg_match("/rec_status,1/m",$res)) {
		exit;
	}

	//SMTP送信
	$param = array(
		'host'		=> $smtpserver,
		'port'		=> 587,
		'from'		=> $fromaddress,
		'protocol'	=> 'SMTP_AUTH',
		'user'		=> $smtpuser,
		'pass'		=> $smtppass,
	);
	$mail = new Qdsmtp($param);
	$mail->mail($to, $subject, $output, $header);
	exit;

そして今改めてググったら新しめのPHPでも動くバージョンが別のところにあった。
qdmailを新しめのPHPでも動くようにした - blog::wnotes.net
今度はこれ使ってみようね…。