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
で…」みたいに思ってしまうけれども、果たしてこれで良いのかどうか…。
悩みどころです。