質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

1回答

2564閲覧

rails のcronの自動停止について

Mkato

総合スコア118

cron

cronは、Unix系OS上でデーモンプロセスとして動作する、スクリプトの自動実行が可能なジョブスケジューラです。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2015/12/24 15:52

ruby 2.1.3
Rails 4.2.3

wheneverを使いcronを設定し、ある条件になった時にcronの停止を行いたいと考えております。

config/schedule.rb

ruby

1 every 3.minute do 2 runner "Task.hogehogehoge" 3 end 4

上記で3分ピッチで実行させる処理
↓実行させる内容。

lib/tasks/task.rb

ruby

1class Task 2 def self.hogehogehoge 3 4 if a == x 5 puts "成功" 6 7#ここで成功した時にcronの処理を停止させる。 8 9 else 10 puts "失敗" 11 end 12 13 end 14end 15

a = xで成功した時にcronを停止したいと考えているのですが、よい方法御座いませんでしょうか?

宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

a = xで成功した時にcronを停止したいと考えているのですが

とのことですが、cron自体を制御してリアルタイムに挙動を変更しようというのはあまり現実的ではないと思います。

というのは、cron自体を制御する方式では以下の制約があるからです。
0. cronサービス自体を停止する方式では目的の処理だけを選択的には止められない
0. crontabの設定変更はリアルタイムには反映されない

「設定変更がリアルタイムに反映されない」という点については、下記ページをご参照ください。

cron の設定ガイド

cronの設定ファイルは、以下の表の通りです。crond は、毎分、以下の設定ファイルの内容に変更がないかを確認し、変更があった場合には、それを反映して実行します。
/var/spool/cron/user
/etc/crontab
/etc/cron.hourly
/etc/cron.daily
/etc/cron.monthly
/etc/cron.weekly
/etc/cron.d

つまり、設定を変更しても反映されるまでに最大1分も掛る可能性があるということです。

ですから、条件によってcron自体を制御するのではなく、cronによって呼び出されるコマンド(スクリプト)の側で処理をスキップする仕組みを作り込んでおくのが実際的ではないかと思います。

具体的には、処理制御用のトークン(たとえば特定の空ディレクトリ)が存在する場合のみ処理を実行するようにしておき、「a = xで成功した時にトークンを削除する」ような処理にすると、対象の処理がスキップされて目的を達成出来ると思います。
(ディレクトリの作成/削除はアトミック操作なので、複数プロセスの排他制御などに良く利用されます。)

投稿2015/12/24 18:13

pi-chan

総合スコア5936

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mkato

2015/12/24 21:14

なるほど。トークン(特定のディレクトリなど)をキーに処理を行う感じすれば良いといった感じでしょうか。 プログラム初心者なのでぼんやりとしか分かっていませんが、調べてみたいと思います。 もし参考になるようなサイトなどがあればご教授頂けると幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問