SlideShare a Scribd company logo
1 of 13
delayed_job の自動再起動
Shinjuku.rb #29
firewood@github
対象サイト
 https://competitiveprogramming.info/
 Rails 4.0
 コンテスト情報の更新の際に
delayed_job を使用
背景
 delayed_job のイメージ ( 偏見 )
 redis 等が不要なので手軽
 たまにゾンビプロセス化する
要求
 落ちること自体は仕方ない
 ただし、正常に動いてないなら自動的
に再起動してほしい
信頼する・しない
 monit ( デーモンの監視 )
 とりあえず信頼する
 delayed_job
 完了したタスクについては信頼する
 常に生きてるとは思わないことにする
monit
 https://mmonit.com/monit/
 様々な種類のリソースが監視できる
 process ID(PID) 、ポート、 CPU 負荷など
何を監視するか決める
 プロセスは存在しているが仕事をして
いなかったり、ポートは開いているが
サービスを提供していなかったりする
 実際の仕事を監視したほうがいい
 一箇所だけならアプリケーションレベルで
監視する
基本方針
 cron で delayed_job にタスクを積む
 ファイルの日付を更新するだけの touch と
いうタスク
 タスクが実行されなかったら monit 経
由で再起動させる
crontab -l
0,30 * * * * /bin/bash -lc 'cd /data/compinfo/current &&
./bin/rake hoge:touch‘
30 分に一度タスクを積む
/etc/monit.d/delayed_job
check file delayed_job with path
/data/compinfo/shared/tmp/pids/alive
if timestamp > 60 minutes then restart
start program = “/bin/su - user –c 'cd /data/compinfo/current;
bin/delayed_job start;
bin/rake hoge:touch'“
stop program = "/bin/su - user –c 'cd /data/compinfo/current;
bin/delayed_job stop'“
60 分更新がなければ、 delayed_job
を再起動させてタスクを積む
lib/tasks/hoge.rake
namespace :hoge do
task :touch => :environment do
Hoge.delay.touch
end
end
Hoge.touch をタスクに積
む
touch
class Hoge < ActiveRecord::Base
def self.touch
FileUtils.touch Rails.root.join('tmp/pids/alive')
end
end
ファイルのタイムスタンプを更新す
る
課題
 再起動するまでが長い
→ プロセスが落ちている場合にも再起動す
る
 monit の default の監視間隔が 1 分なの
で、復帰直後に重いタスクがあると再
起動してしまう
→ すべてのタスクの先頭で Hoge.touch を呼
ぶようにする

More Related Content

What's hot

MySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことMySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことyoku0825
 
ワタナベ難読化シェル芸
ワタナベ難読化シェル芸ワタナベ難読化シェル芸
ワタナベ難読化シェル芸xztaityozx
 
runC概要と使い方
runC概要と使い方runC概要と使い方
runC概要と使い方Yuji Oshima
 
LINEの新卒採用試験 ズバリ問題解説
LINEの新卒採用試験 ズバリ問題解説LINEの新卒採用試験 ズバリ問題解説
LINEの新卒採用試験 ズバリ問題解説LINE Corporation
 
命名規則のススメ
命名規則のススメ命名規則のススメ
命名規則のススメnatrium11321
 
DNS移転失敗体験談
DNS移転失敗体験談DNS移転失敗体験談
DNS移転失敗体験談oheso tori
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すTakaya Saeki
 
ChatGPT + LlamaIndex 0 .6 による チャットボット の実装
ChatGPT + LlamaIndex 0  .6 による チャットボット の実装ChatGPT + LlamaIndex 0  .6 による チャットボット の実装
ChatGPT + LlamaIndex 0 .6 による チャットボット の実装Takanari Tokuwa
 
.NETのTuple応用チャレンジ WCFとC++/CLI
.NETのTuple応用チャレンジ WCFとC++/CLI.NETのTuple応用チャレンジ WCFとC++/CLI
.NETのTuple応用チャレンジ WCFとC++/CLIkeitasudo1
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理信之 岩永
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能についてshigeki_ohtsu
 
【ICLR2023】論文紹介: Image as Set of Points
【ICLR2023】論文紹介: Image as Set of Points【ICLR2023】論文紹介: Image as Set of Points
【ICLR2023】論文紹介: Image as Set of PointsShoki Miyagawa
 
【DL輪読会】Toolformer: Language Models Can Teach Themselves to Use Tools
【DL輪読会】Toolformer: Language Models Can Teach Themselves to Use Tools【DL輪読会】Toolformer: Language Models Can Teach Themselves to Use Tools
【DL輪読会】Toolformer: Language Models Can Teach Themselves to Use ToolsDeep Learning JP
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話simotin13 Miyazaki
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回Tomoya Kawanishi
 
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理KageShiron
 
TUI作業で便利なソフト2題
TUI作業で便利なソフト2題TUI作業で便利なソフト2題
TUI作業で便利なソフト2題shimadah
 
「Frama-Cによるソースコード検証」 (mzp)
「Frama-Cによるソースコード検証」 (mzp)「Frama-Cによるソースコード検証」 (mzp)
「Frama-Cによるソースコード検証」 (mzp)Hiroki Mizuno
 

What's hot (20)

MySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことMySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいこと
 
LLVM最適化のこつ
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつ
 
ワタナベ難読化シェル芸
ワタナベ難読化シェル芸ワタナベ難読化シェル芸
ワタナベ難読化シェル芸
 
runC概要と使い方
runC概要と使い方runC概要と使い方
runC概要と使い方
 
LINEの新卒採用試験 ズバリ問題解説
LINEの新卒採用試験 ズバリ問題解説LINEの新卒採用試験 ズバリ問題解説
LINEの新卒採用試験 ズバリ問題解説
 
命名規則のススメ
命名規則のススメ命名規則のススメ
命名規則のススメ
 
DNS移転失敗体験談
DNS移転失敗体験談DNS移転失敗体験談
DNS移転失敗体験談
 
WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
ChatGPT + LlamaIndex 0 .6 による チャットボット の実装
ChatGPT + LlamaIndex 0  .6 による チャットボット の実装ChatGPT + LlamaIndex 0  .6 による チャットボット の実装
ChatGPT + LlamaIndex 0 .6 による チャットボット の実装
 
Paxos
PaxosPaxos
Paxos
 
.NETのTuple応用チャレンジ WCFとC++/CLI
.NETのTuple応用チャレンジ WCFとC++/CLI.NETのTuple応用チャレンジ WCFとC++/CLI
.NETのTuple応用チャレンジ WCFとC++/CLI
 
Unicode文字列処理
Unicode文字列処理Unicode文字列処理
Unicode文字列処理
 
Node-v0.12の新機能について
Node-v0.12の新機能についてNode-v0.12の新機能について
Node-v0.12の新機能について
 
【ICLR2023】論文紹介: Image as Set of Points
【ICLR2023】論文紹介: Image as Set of Points【ICLR2023】論文紹介: Image as Set of Points
【ICLR2023】論文紹介: Image as Set of Points
 
【DL輪読会】Toolformer: Language Models Can Teach Themselves to Use Tools
【DL輪読会】Toolformer: Language Models Can Teach Themselves to Use Tools【DL輪読会】Toolformer: Language Models Can Teach Themselves to Use Tools
【DL輪読会】Toolformer: Language Models Can Teach Themselves to Use Tools
 
C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話C・C++用のコードカバレッジツールを自作してみた話
C・C++用のコードカバレッジツールを自作してみた話
 
きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回きつねさんでもわかるLlvm読書会 第2回
きつねさんでもわかるLlvm読書会 第2回
 
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理
 
TUI作業で便利なソフト2題
TUI作業で便利なソフト2題TUI作業で便利なソフト2題
TUI作業で便利なソフト2題
 
「Frama-Cによるソースコード検証」 (mzp)
「Frama-Cによるソースコード検証」 (mzp)「Frama-Cによるソースコード検証」 (mzp)
「Frama-Cによるソースコード検証」 (mzp)
 

Similar to delayed_jobの自動再起動

あなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CIあなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CIWataru MIYAGUNI
 
FAV001_はじめよう自己監視
FAV001_はじめよう自己監視FAV001_はじめよう自己監視
FAV001_はじめよう自己監視Hiroki.lzh
 
運用の現場での監視運用ツールの活用
運用の現場での監視運用ツールの活用運用の現場での監視運用ツールの活用
運用の現場での監視運用ツールの活用真治 米田
 
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Norito Agetsuma
 
ロボットシステム学2015年第9回
ロボットシステム学2015年第9回ロボットシステム学2015年第9回
ロボットシステム学2015年第9回Ryuichi Ueda
 
Github Actionsで始めるROS/ROS2のCI
Github Actionsで始めるROS/ROS2のCIGithub Actionsで始めるROS/ROS2のCI
Github Actionsで始めるROS/ROS2のCIAtsuki Yokota
 
ビットキーのIoT基盤におけるAWS IoT Rule Action 活用
ビットキーのIoT基盤におけるAWS IoT Rule Action 活用ビットキーのIoT基盤におけるAWS IoT Rule Action 活用
ビットキーのIoT基盤におけるAWS IoT Rule Action 活用Ryo Sasaki
 
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜Ryo Sasaki
 
第8回 福岡西区勉強会
第8回 福岡西区勉強会第8回 福岡西区勉強会
第8回 福岡西区勉強会Shinya Kinoshita
 
DevOpsのはじめの一歩 〜監視の変遷〜
DevOpsのはじめの一歩 〜監視の変遷〜DevOpsのはじめの一歩 〜監視の変遷〜
DevOpsのはじめの一歩 〜監視の変遷〜Akihiro Kuwano
 
JobScheduler Code Reading
JobScheduler Code ReadingJobScheduler Code Reading
JobScheduler Code ReadingShinobu Okano
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト健一 辰濱
 
インフラ自動化とHashicorp tools
インフラ自動化とHashicorp toolsインフラ自動化とHashicorp tools
インフラ自動化とHashicorp toolsUchio Kondo
 
配布用Supervisordによるnode.jsの運用
配布用Supervisordによるnode.jsの運用配布用Supervisordによるnode.jsの運用
配布用Supervisordによるnode.jsの運用yut148atgmaildotcom
 
バージョン管理
バージョン管理バージョン管理
バージョン管理Misa Kondo
 
Gitoriousをubuntu 10.04 LTSへインストール
Gitoriousをubuntu 10.04 LTSへインストールGitoriousをubuntu 10.04 LTSへインストール
Gitoriousをubuntu 10.04 LTSへインストールKiyoshi SATOH
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -Yukihiko SAWANOBORI
 
運用効率化・運用自動化を実現するHinemosのご紹介
運用効率化・運用自動化を実現するHinemosのご紹介運用効率化・運用自動化を実現するHinemosのご紹介
運用効率化・運用自動化を実現するHinemosのご紹介Hinemos
 

Similar to delayed_jobの自動再起動 (20)

あなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CIあなたの安心を高速に守る Container-based CI
あなたの安心を高速に守る Container-based CI
 
20121205 jjbug
20121205 jjbug20121205 jjbug
20121205 jjbug
 
FAV001_はじめよう自己監視
FAV001_はじめよう自己監視FAV001_はじめよう自己監視
FAV001_はじめよう自己監視
 
運用の現場での監視運用ツールの活用
運用の現場での監視運用ツールの活用運用の現場での監視運用ツールの活用
運用の現場での監視運用ツールの活用
 
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015
 
ロボットシステム学2015年第9回
ロボットシステム学2015年第9回ロボットシステム学2015年第9回
ロボットシステム学2015年第9回
 
Github Actionsで始めるROS/ROS2のCI
Github Actionsで始めるROS/ROS2のCIGithub Actionsで始めるROS/ROS2のCI
Github Actionsで始めるROS/ROS2のCI
 
ビットキーのIoT基盤におけるAWS IoT Rule Action 活用
ビットキーのIoT基盤におけるAWS IoT Rule Action 活用ビットキーのIoT基盤におけるAWS IoT Rule Action 活用
ビットキーのIoT基盤におけるAWS IoT Rule Action 活用
 
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
 
第8回 福岡西区勉強会
第8回 福岡西区勉強会第8回 福岡西区勉強会
第8回 福岡西区勉強会
 
DevOpsのはじめの一歩 〜監視の変遷〜
DevOpsのはじめの一歩 〜監視の変遷〜DevOpsのはじめの一歩 〜監視の変遷〜
DevOpsのはじめの一歩 〜監視の変遷〜
 
JobScheduler Code Reading
JobScheduler Code ReadingJobScheduler Code Reading
JobScheduler Code Reading
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト
 
インフラ自動化とHashicorp tools
インフラ自動化とHashicorp toolsインフラ自動化とHashicorp tools
インフラ自動化とHashicorp tools
 
配布用Supervisordによるnode.jsの運用
配布用Supervisordによるnode.jsの運用配布用Supervisordによるnode.jsの運用
配布用Supervisordによるnode.jsの運用
 
バージョン管理
バージョン管理バージョン管理
バージョン管理
 
Gitoriousをubuntu 10.04 LTSへインストール
Gitoriousをubuntu 10.04 LTSへインストールGitoriousをubuntu 10.04 LTSへインストール
Gitoriousをubuntu 10.04 LTSへインストール
 
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
密着! nibohsiデプロイ 13:00-13:05 - railsアプリのデプロイ事例 -
 
恋するJenkins
恋するJenkins恋するJenkins
恋するJenkins
 
運用効率化・運用自動化を実現するHinemosのご紹介
運用効率化・運用自動化を実現するHinemosのご紹介運用効率化・運用自動化を実現するHinemosのご紹介
運用効率化・運用自動化を実現するHinemosのご紹介
 

More from firewood

Best Bugs 2017 in the SmartNews iOS app
Best Bugs 2017 in the SmartNews iOS appBest Bugs 2017 in the SmartNews iOS app
Best Bugs 2017 in the SmartNews iOS appfirewood
 
Xcodeでmrubyをステップ実行してみた
Xcodeでmrubyをステップ実行してみたXcodeでmrubyをステップ実行してみた
Xcodeでmrubyをステップ実行してみたfirewood
 
Xcodeで値を表示する
Xcodeで値を表示するXcodeで値を表示する
Xcodeで値を表示するfirewood
 
SmartNewsアプリの品質
SmartNewsアプリの品質SmartNewsアプリの品質
SmartNewsアプリの品質firewood
 
WkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたWkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたfirewood
 
C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみたfirewood
 
フィルタドライバ入門
フィルタドライバ入門フィルタドライバ入門
フィルタドライバ入門firewood
 
三日で書くGroonga関数
三日で書くGroonga関数三日で書くGroonga関数
三日で書くGroonga関数firewood
 

More from firewood (10)

Best Bugs 2017 in the SmartNews iOS app
Best Bugs 2017 in the SmartNews iOS appBest Bugs 2017 in the SmartNews iOS app
Best Bugs 2017 in the SmartNews iOS app
 
Xcodeでmrubyをステップ実行してみた
Xcodeでmrubyをステップ実行してみたXcodeでmrubyをステップ実行してみた
Xcodeでmrubyをステップ実行してみた
 
Xcodeで値を表示する
Xcodeで値を表示するXcodeで値を表示する
Xcodeで値を表示する
 
SmartNewsアプリの品質
SmartNewsアプリの品質SmartNewsアプリの品質
SmartNewsアプリの品質
 
WkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べたWkWebViewのキャッシュについて調べた
WkWebViewのキャッシュについて調べた
 
C++でHello worldを書いてみた
C++でHello worldを書いてみたC++でHello worldを書いてみた
C++でHello worldを書いてみた
 
フィルタドライバ入門
フィルタドライバ入門フィルタドライバ入門
フィルタドライバ入門
 
三日で書くGroonga関数
三日で書くGroonga関数三日で書くGroonga関数
三日で書くGroonga関数
 
L-R
L-RL-R
L-R
 
FPGA
FPGAFPGA
FPGA
 

delayed_jobの自動再起動