꼭두각시의 서비스에 사용자 지정 상태 명령을 사용하는 방법은 무엇입니까?


10

백 포트에서 PostgreSQL 9.1과 함께 debian squeeze를 사용하고 있습니다. 꼭두각시 버전은 2.7.14입니다. 불행히도 init 스크립트는 상태에 대해 잘못된 종료 코드를 반환합니다. 따라서 statuspostgresql이 실행 중인지 여부를 감지 하는 사용자 지정 명령을 작성했습니다 .

service { 'postgresql':
  ensure => running,
  enable => true,
  hasstatus  => false,
  hasrestart => true,
  status => "pg_lsclusters -h | awk 'BEGIN {rc=0} {if ($4 != \"online\") rc=3} END { exit rc }'",
  provider => debian,
}

내 명령은 매력처럼 작동하지만 꼭두각시에는 문제가있는 것 같습니다. 나는 notice: /Stage[main]/Postgresql/Service[postgresql]/ensure: ensure changed 'stopped' to 'running'이미 실행 중이지만 항상 얻 습니다.

따라서 다음을 시도하십시오.

service { 'postgresql':
  ensure => running,
  enable => true,
  hasstatus  => false,
  hasrestart => true,
  status => "exit 0",
  provider => debian,
}

이 사용자 정의 status명령을 이해 했으므로 꼭두각시는 postgresql이 실행 중이라고 항상 생각해야합니다. 그럼에도 불구하고 꼭두각시는 postgresql을 시작할 때마다 시도합니다.

내 잘못은 무엇입니까? 아니면 꼭두각시의 버그입니까?


매니페스트가 올바르게 보이므로 Puppet의 버그처럼 들립니다. 긴 샷이지만 설정을 시도 provider => init하고 enable매개 변수를 제거하십시오 .
mgorven

2
종료 0이 유효한 명령인지 확인하십시오. exit 명령은 일반적으로 쉘 내부에 있습니다. bash -c 'exit 0'과 같은 것을해야합니까?
Zoredache

@ 조르 데샤 당신이 맞아요. sh -c 'exit 0'을 사용하면 status꼭두각시 명령이 예상대로 작동합니다!
MMore

답변:


6

가장 좋은 추측은 $4명령 의 in이 꼭두각시 자체 보간에 의해 삼켜지고 exit 0쉘 상호 작용 문제로 인해 제대로 작동하지 않는다는 것입니다.

몇 가지 시도해 볼 것입니다.

  1. 문제가 $4명령에서 꼭두각시 보간법 인 경우 다음 $과 같이 이스케이프 status => "pg_lsclusters -h | awk 'BEGIN {rc=0} {if (\$4 != \"online\") rc=3} END { exit rc }'"하십시오.
  2. 테스트 명령이 제대로 작동하는지 확인하십시오. exit내부 쉘이며 꼭두각시가 어떻게 처리하는지 잘 모르겠습니다. 따라서 표준 "return success"명령을 대신 사용하십시오.status => "/bin/true"
  3. 어쩌면 status에 의해 무시되고 provider => debian그래서 대신 (이 있지만, 제대로 사용하지 않습니다) 모든 명령을 지정하고 기본 공급자를 사용, (꼭두각시 버그 것이다) :

    service { 'postgresql':
      provider => base,
      ensure   => 'running',
      start    => '/etc/init.d/postgresql start',
      restart  => '/etc/init.d/postgresql restart',
      stop     => '/etc/init.d/postgresql stop',
      status   => "pg_lsclusters -h | awk 'BEGIN {rc=0} {if (\$4 != \"online\") rc=3} END { exit rc }'",
    }
    

다른 하나 : exec유형 과 유사하게 꼭두각시에는 실행 파일에 대한 전체 경로가 필요하다고 생각합니다. status전역으로 설정하지 않은 경우 라인 의 전체 경로로 설정해보십시오 .
Shane Madden

@ShaneMadden : 꼭두각시에는 명령에 대한 전체 경로가 반드시 필요한 것은 아니지만 명령이 필요하다고 가정해도 아무런 문제가 없습니다. 일종의 기본 경로 (환경 데몬의 PATH가 시작 되었습니까?) 외에도 매개 변수를 exec허용하며 또는 path로 기본 경로를 설정할 수 있습니다 . 서비스에는 비슷한 '경로'가 있지만 일반적인 쉘 스타일 명령 검색 경로가 아닌 init 스크립트를 찾기 위해 특정 공급자와 주로 사용되는 것으로 보입니다. Exec { path => '/usr/bin:/bin' }Exec { path => ['/usr/bin'],['/bin']}
freiheit

1
감사! 보간이 $4문제였습니다. 나는 그것을 대체 \$4하고 이제 모든 것이 예상대로 작동합니다 :)
MMore
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.