いつもお世話になっております。
Rubyにてメール受信時に動くプログラムを作成しています。
crontabで動くプログラムと違い、実行結果や出力をメールで受け取れないのでエラーが発生した際に対応が遅くなってしまい大変、困っております。
現状、下記のようにloggerとmailのライブラリを使用し、ログを記録しメールで送信といった風に行っております。
require 'logger' def initialize $log = Logger.new("log/logger.log",10) $log.datetime_format = "%Y-%m-%d %H:%M:%S" $log.level = Logger::INFO $errors = [] end def logger(type="info", text) puts text $log.info (text) if type == "info" $log.warn (text) if type == "warn" if type == "error" $log.error (text) $errors << text end end def send_log_mail(type ="log") Mail.defaults do delivery_method :smtp, { :address => "smtp.gmail.com", :port => 587, :domain => 'gmail.com', :user_name => 'test@gmail.com', :password => 'password', :authentication => 'plain', :enable_starttls_auto => true } end if type == "log" && $logs.empty? == false m = Mail.new do from "test@gmail.com" to "info@example.com" subject "ログ" body $logs end m.charset = "UTF-8" m.content_transfer_encoding = "8bit" m.deliver elsif type == "error" && $errors.empty? == false m = Mail.new do from "test@gmail.com" to "info@example.com" subject "エラー" body $errors end m.charset = "UTF-8" m.content_transfer_encoding = "8bit" m.deliver end end send_log_mail("error") send_log_mail
しかし、上記の方法ではプログラムがエラーで動かなかった場合のエラーなど、ログ出力出来ません。
crontabであれば、エラーやputsなどすべてのログがメールで送信されるので、そのような形にしたいと考えております。
###質問
crontabのように標準でそのような機能はないのでしょうか?
どのようにすれば、プログラムで発生した標準出力を読み込めるのでしょうか?
よろしくお願い致します。
###追記
#!/bin/bash TEMP=/tmp/syncStock_temp$$ trap "rm -f $TEMP" 0 cd /var/www/html/Ruby/Application/ /usr/local/rbenv/shims/bundle exec /usr/local/rbenv/versions/2.3.1/bin/ruby mailTrigger.rb > $TEMP 2>&1 CC=$? if test $CC != 0 -o -s $TEMP then mail -s "ERROR CC=$CC" mail < $TEMP fi exit 0

回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/06/06 02:16
2017/06/06 03:38
2017/06/06 11:30 編集
2017/06/06 12:51
2017/06/06 12:59 編集
2017/06/06 12:59
2017/06/06 13:00
2017/06/06 13:18
2017/06/06 13:25
2017/06/06 13:41
2017/06/06 13:46
2017/06/06 13:55