ググっても出てこなかったのでメモ
Sidekiq::ProcessSet.new.map {|ps| ps['hostname'] }.include?(Socket.gethostname)
# または
Sidekiq::ProcessSet.new.map {|ps| ps['hostname'] }.include?(`hostname`.strip)
これで、
「現在のサーバでsidekiqプロセスが動いている場合はtrue、動いていない場合はfalse」が取得できます。
複数サーバでsidekiqプロセスを動かしていることがあると思いますが、
そのような時に有用かと思います。
ちなみに上記のコマンド内で出てくる Socket.gethostname
や`hostname`.strip
は「Ruby のプロセスが稼働しているサーバの hostname を取得する」コマンドのようです。
Socket.gethostname
の方は、ruby 2.7以降ではdeprecatedとのことなので、
どちらかというと後者の`hostname`.strip
が推奨されます。
参考
- https://qiita.com/notakaos/items/368f2e1b3c4d672e2c04
- https://stackoverflow.com/questions/42566/getting-the-hostname-or-ip-in-ruby-on-rails
活用場面
「起動中のサーバでsidekiqプロセスが起動中かどうか」をif文にした処理を実装する場面で使用しました。
環境
ruby 2.6.6
rails 5.2
sidekiq 5.2.9
最後に
もっと良いコマンドがあれば教えていただけますと幸いです、、!!