Por padrão, o Chef verificará se o serviço está sendo executado e o iniciará se o serviço não estiver em execução.
Como isso determina que o serviço está sendo executado depende.
Por padrão, o Chef tentará corresponder o nome do serviço ( postgresql
here) na tabela de processos usando ps
.
ps -ef | grep postgresql
Essencialmente. O nome do serviço será usado para a correspondência de padrões ao inspecionar a tabela de processos. Isso pode ou não ser o que você quer / precisa, especialmente dependendo da plataforma e como ele nomeia o serviço "postgresql".
No entanto, você pode dizer ao Chef que o serviço suporta um comando "status", o que significa que o Chef geralmente fará algo como
/etc/init.d/postgresql status
E use o código de retorno para determinar se ele está sendo executado ou não (não-zero não está em execução).
O Chef não faz isso por padrão, porque nem todos os scripts de serviço suportam um comando de status (de maneira frustrante), e o Chef não sabe, por natureza, qual é a coisa certa a fazer. Ele tenta fazer a coisa padrão, mas às vezes ingênua. Assim, você pode dizer ao Chef que o recurso tem um comando de status e não é tão ingênuo.
service "postgresql" do
supports :status => true
action :start
end
Agora, se o serviço não tiver o nome "postgresql", mas sim "postgresql-92" ou similar, você poderá fazer isso como:
service "postgresql-92" do
supports :status => true
action :start
end
ou
service "postgresql" do
service_name "postgresql-92"
supports :status => true
action :start
end
Você pode descobrir o que está acontecendo com mais detalhes, executando o chef com a saída de depuração, também:
chef-client -l debug