直径1.5メートル

ひよっこエンジニアのちょっとしたメモ。主に備忘録。たまに雑記。

【Serverspec】sidekiqのプロセスを確認する

Serverspecをちょこちょこ書いていて、sidekiqのプロセス確認をするコードを書いた時に
「sidekiqのプロセスも、リソースタイプのprocessで一発!」
と思ったら一発で仕留められなかったので、メモ。

processでsidekiqのプロセスを確認

processを使ってsidekiqの確認をした時のコード。

# sidekiqのプロセス確認
describe process('sidekiq') do
  it { should be_running }
end

これを実行すると、下記のようなエラーになりました。

Failures:

  1) Process "sidekiq" should be running
     On host `0.0.0.0'
     Failure/Error: it{ should be_running }
       expected Process "sidekiq" to be running
       sudo -p 'Password: ' /bin/sh -c ps\ -C\ sidekiq\ -o\ pid\=\ \|\ head\ -1

$ps -ef | grep sidekiqで確認する限りでは取得できていたので、「なんでかなー」と思っていたところ、

コマンド名とプロセス名が一致していない場合はリソースタイプ process を利用することが出来ない。
Serverspecでリソースタイプ process や package が使えない場合とその対処 - Qiita

とのこと。
改めて確認してみると、 $bundle exec sidekiqで起動していたので$ ps -C bundleでプロセスが確認できました。
ただ、これで確認するのもなぁ…という感じもするので、commandを使うことに。

commandでsidekiqのプロセスを確認

いつもプロセス確認する時のコマンドで確認しています。

describe command('ps -ef | grep [s]idekiq') do
  let(:disable_sudo) { true }
  its(:exit_status){ should eq 0 }
end

これを実行すると…

Command "ps -ef | grep [s]idekiq"
  exit_status
    should eq 0

無事成功。

何かと「うまくいかなかったらcommandで…」みたいに思ってしまうけれども、果たしてこれで良いのかどうか…。
悩みどころです。