

Rubyで定刻にirkitを操作してホームオートメーションを実現したいと考えています。  
指定した時刻に実行するのは`gem "clockwork"`で出来るようですが、`clockworkd -c clock.rb
start`とdaemonかフォアグラウンドプロセスを動かす必要があり当然ながらclock.rbを編集しただけではスケジュールは反映されません。  
`clockworkd -c clock.rb restart`としてやれば反映されましたがclockworkに限らず他の方法はないでしょうか？  
シェルコマンドを実行せずにWeb側のrackup時に別スレッドで立ち上がりrubyのコードでスケジュールの追加、削除、変更が出来るようなイメージです。


CC BY-SA 3.0
2015-05-14T14:02:34.917
10185
2020-07-25T05:23:34.810
9733
question
ruby clockwork rubygems
Rubyで目覚まし時計風アプリを作成したい


<https://github.com/Rykian/clockwork> のソースコードを見てみましたが、次のような作りでした。

  1. clock.rbはbin/clockworkd内で単純に`require`されている。(再読み込みは想定されていない)
  2. clockworkはシグナルINT、TERM、HUPを受け取れるがどれらも終了(shutdown)または緩やかに終了(graceful_shutdown)であり、restartやreloadはない。そもそも管理クラスである`Clockwork::Manager`にそのような機能がない。

clockworkdはdaemonsを使ってデーモン化していますが、restartでの動作は、新しいclock.rbを`require`してから、以前のプロセスの終了、そして、新しいプロセスでの`Clockwork.run`実行としているようです。結論から言うと、`clockworkd
-c clock.rb
restart`とデーモン再起動する以外の方法で新しいclock.rbを読み直す方法はありません。言い換えれば、既に実行されているプロセスで読み直せるような作りにclockwork自体が作られていないのです。

rackup内でsystem等を用いて`clockworkd -c clock.rb
start`としているのだと思いますが、clock.rbが書き換わったら、同じように`clockworkd -c clock.rb
restart`するぐらいしか対応方法は無いと思われます。


CC BY-SA 4.0
2020-07-25T05:23:34.810
68932
2020-07-25T05:23:34.810
7347
10185
answer