勉強したことのメモ

webプログラマが勉強したことのメモ。

Rubyでサイトの死活管理ツールの作成

   

Rubyの勉強で何かツールを作ろうと考えた。また、Railsとかは使わず素のRubyで、尚且つWebページとかは用意せずにコマンドラインからのみ使用ツールを作ってみたかった。サイトの死活管理ツールとか良さげだと思ったのでメモ。

 

環境と作成する機能

Rubyのバージョンは2.3.1を使用。

作成する機能としては特定のURLに接続を試しみてステータスコードが200以外の場合はメールを送信するというもの。またそのプログラムはCronで自動実行すると想定。

 

ソース

require 'open-uri'
require 'mail'

def notification
	mail = Mail.new do
		from "送り元メールアドレス"
		to "送り先メールアドレス"
		subject "error subject"
		body "error body"
	end

	mail.deliver
end

uri = "チェックしたいページのURL"
begin
	status = open(uri).status
	if status[0].to_i != 200
		notification
	end
rescue
	notification
end

1行目はRubyのライブラリ「open-uri」というものを読み込んでいる。file_get_contents的なものみたい。リファレンスは以下。

https://docs.ruby-lang.org/ja/latest/library/open=2duri.html

2行目は「mail」というライブラリになる。そのままだけどメール送信に関するライブラリになる。こちらのリファレンスは見つからず。

あとはURLをチェックしてステータスコードが200じゃない、もしくはエラー発生時は「notification関数」を呼んでメール送信するという内容。

関数については実行前に記述しておかないといけない。作成時は実行後に書いていたのでエラーが発生した。

 

環境によってはメールが受信できない

これはRubyは関係なくメールサーバの問題だと思われるが、メールが受信できたり出来なかったりした。環境としてはsendmailで何も設定を行わずに起動しただけ。メールサーバ設定は未だによく分からないので、GmailのSMTPサーバを使ってメール送信する方法を用いた。以下がソース。

require 'open-uri'
require 'mail'

def notification
	mail = Mail.new

	options = {
		:address => "smtp.gmail.com",
		:port => 587,
		:domain => "smtp.gmail.com",
		:user_name => 'ここにGmailアドレス',
		:password => 'ここにパスワード',
		:authentication => :plain,
		:enable_starttls_auto => true
	}
	mail.charset = 'utf-8'
	mail.from "送り元メールアドレス" 
	mail.to "送り先メールアドレス" 
	mail.subject "メールタイトル"
	mail.body "メール本文"
	mail.delivery_method(:smtp, options)
	mail.deliver

end

uri = "チェックしたいページのURL"
begin
	status = open(uri).status
	if status[0].to_i != 200
		notification
	end
rescue
	notification
end

 

Cronで実行する

vi /etc/crontab
*/1 * * * * root ruby /aaa/bbb/ccc/check.rb

 

参考

https://qiita.com/nyamage/items/7145159c9a610f99b5d9

 - Ruby

  関連記事

Rubyでcookie指定した上でスクレイピング

Rubyで通販サイトの特定ページから価格部分のみを抽出したかった。そのサイトでは ...

ServersManのVPSにRuby on Railsを導入する方法

Ruby on Railsを導入した際のメモ。Cens OSのバージョンは6.3 ...

Rubyで基本的な構文のメモ

Railsを勉強する前にRubyの基本的な構文だけは抑えておこうと思ったのでメモ ...

Rubyで日時とファイルの取扱い

Rubyで日時を取得して整形した上で、指定したファイルに追記していきたかった。以 ...