Chef가 서비스 (postgres)를 시작할 수있는 상황이지만 이후 대역 외에서 중지 될 수 있습니다. 후속 Chef 실행으로 서비스가 실행되기를 원합니다. 나는 이것을 시도했다 :
service "postgresql" do
action :start
end
그러나 (up to date)
Chef는 그것이 시작되었다는 것을 알고 그것이 중지되었다고 말할 수 없기 때문에 효과 가 없습니다. (아마도이 service ... status
서비스 에 대해 어떻게 행동합니까?)
# anti-pattern warning!
execute "force-start-postgresql" do
command "service postgresql start || /etc/init.d/postgresql start"
action :run
end
원하는 행동을 취합니다. 또한 action :restart
실행합니다. 그러나 이들은 이식성으로 인해 안티 패턴처럼 보입니다 (후자의 경우 다시 시작하기 전에 잠재적으로 중지).
그렇다면 Chef가 서비스가 이미 실행되고 있다고 생각하더라도 서비스를 강제로 시작하도록하려면 어떻게해야합니까?
이것은 OpsCode가 호스팅하는 Chef 11.6 및 기본 postgresql 레시피를 사용합니다. (이것은 비슷하지만 Chef의 "최신"리소스에 대한 작업을 강제하는 방법 과는 같지 않습니다 .)
--- 편집 (jtimberland 게시물에 따른 설명) ---
-l debug
여기 쇼 :
DEBUG: service[postgresql] supports status, running
DEBUG: service[postgresql] is running
실행 중이 아니더라도. 그래서 그것은 하나의 버그처럼 들립니다. 그러나 나는 Chef에게 "항상 상태 확인을 건너 뛰고 서비스 시작 명령을 호출합니다"라고 말하는 방법이 있는지에 관심이 있습니다. 이것이 바로 질문입니다.
(내가 전문가는 아니지만 그러나 나는 서비스를 보장하는 대부분의 휴대용 방법은 서비스를 시작하는 것입니다 실행 생각하고는 거의 항상 나무 등이다. OTOH 검사 서비스가 덜 일치 실행되고 있는지 여부를 우리가 관심을 가져야하는 이유는 표시되지 않습니다 !)
:start
상관없이 의:status
. 또한 나는 그것이ps -ef | grep [p]ostgresql
비슷하거나 유사하기를 바랍니다 . 그렇지 않으면 일반적으로 자체 grep 명령과 일치하므로 항상 서비스가 실행되고 있다고 생각합니다. (또는 이것이 근본적인 문제일까요?)