0

Hyperic をデプロイするための Puppet モジュールを作成しています。最後の部分では、サービスが実行されていない場合にhq-agent.sh startを実行しています。サービスが実行されているかどうかを判断するには、「HQ Agent is running」というテキストを含むhq-agent.sh statusを実行します。

Puppet のドキュメントには、動作する場合のみと記載されていますが、実行中の場合は終了コード 1 を返し、実行していない場合は 0 を返す必要があります。変換を行うための適切な bash(?) コマンドは何ですか?

疑似コード => if ('hq-agent.sh status' contains "running") return 1; それ以外の場合は 0 を返します。

4

1 に答える 1

2

Serviceこれは、リソースではなくリソースを介してモデル化する必要があるもののように聞こえExecます。そのために、システムの通常のサービス制御サブシステム (initscripts、systemd など) を介してサービスを管理する必要はありませんが、適切なスクリプトや構成ファイルを自分で作成する必要がある場合でも、そのように手配することをお勧めします。 . ただし、この場合、hq-agent.shスクリプトは従来の initscript と同じではないにしても、似たインターフェイスを持っているように見えます。もしそうなら、おそらく通常のシステムサービスとして設定するのはかなり簡単でしょう. そうすれば、管理は次のように簡単になります

service { 'hq-agent':
  ensure => 'running',
  enable => true,
}

ただし、アドホックスクリプトを使用してサービスを管理したいだけの場合は、Puppet でサポートできます。具体的にはServiceリソースにはstart、、、、および属性があり、これらの属性を使用して、サービスを管理するための任意のコマンドを指定できます。例えば、restartstatusstop

service { 'hq-agent':
  ensure     => 'running',
  provider   => 'service',
  hasstatus  => false,
  hasrestart => false,
  status     => 'hq-agent.sh status',
  start      => 'hq-agent.sh start',
  stop       => 'hq-agent.sh stop',
  path       => '/path/to/hyperic/bin',
  # no 'enable' attribute specified
}

hq-agent.shその特定の例では、標準の SysV initscript との表面的な類似性に基づいて、スクリプトの終了コードについていくつかの仮定を立てています。具体的には、 LSB 仕様に準拠していることを前提としています。実際にそうでない場合、終了コードではなくスクリプトの出力をテストする必要があるため、典型的なアプローチは、出力を にパイプすることgrepです。例えば、

  status => 'hq-agent.sh status | grep -q running'

ただし、標準出力ではなく、スクリプトの標準エラーをテストする必要がある場合があることに注意してください。

于 2018-09-12T20:31:46.190 に答える