web-dev-qa-db-ja.com

Puppetserverサービスが開始に失敗する

Vagrant CentOSがあるVM ps.memory = 2048 RAM割り当てられています。

puppetserverサービスを開始しようとすると:

$ puppet --version
4.4.0
$ Sudo puppet resource service puppetserver ensure=running
Error: Could not start Service[puppetserver]: Execution of '/bin/systemctl start puppetserver' returned 1: Job for puppetserver.service failed. See 'systemctl status puppetserver.service' and 'journalctl -xn' for details.
Error: /Service[puppetserver]/ensure: change from stopped to running failed: Could not start Service[puppetserver]: Execution of '/bin/systemctl start puppetserver' returned 1: Job for puppetserver.service failed. See 'systemctl status puppetserver.service' and 'journalctl -xn' for details.
service { 'puppetserver':
  ensure => 'stopped',
}
$ journalctl -xn
No journal files were found.
$ systemctl status puppetserver.service
puppetserver.service - puppetserver Service
   Loaded: loaded (/usr/lib/systemd/system/puppetserver.service; disabled)
  Process: 4708 ExecStartPre=/usr/bin/install --directory --owner=puppet --group=puppet --mode=775 /var/run/puppetlabs/puppetserver (code=exited, status=0/SUCCESS)
 Main PID: 4709 (Java);         : 4710 (bash)
   CGroup: /system.slice/puppetserver.service
           ├─4709 /usr/bin/Java -Xms1g -Xmx1g -XX:MaxPermSize=1g -XX:OnOutOfMemoryError=kill -9 %p -Djava.security.egd=/...
           └─control
             ├─4710 /bin/bash /opt/puppetlabs/server/apps/puppetserver/ezbake-functions.sh wait_for_app
             └─4755 sleep 1

ぼくの Java_ARGSから/etc/sysconfig/puppetserver

Java_ARGS="-Xms1g -Xmx1g -XX:MaxPermSize=1g"

リクエストに応じて、puppetserver.serviceファイル:

$ cat /usr/lib/systemd/system/puppetserver.service
[Unit]
Description=puppetserver Service
After=syslog.target network.target

[Service]
Type=simple
EnvironmentFile=/etc/sysconfig/puppetserver
User=puppet
TimeoutStartSec=120
TimeoutStopSec=60
Restart=on-failure
StartLimitBurst=5

PermissionsStartOnly=true
ExecStartPre=/usr/bin/install --directory --owner=puppet --group=puppet --mode=775 /var/run/puppetlabs/puppetserver

ExecStart=/usr/bin/Java $Java_ARGS \
          '-XX:OnOutOfMemoryError=kill -9 %%p' \
          -Djava.security.egd=/dev/urandom \
          -cp "${INSTALL_DIR}/puppet-server-release.jar" clojure.main \
          -m puppetlabs.trapperkeeper.main \
          --config "${CONFIG}" \
          -b "${BOOTSTRAP_CONFIG}" $@

KillMode=process

ExecStartPost=/bin/bash "${INSTALL_DIR}/ezbake-functions.sh" wait_for_app

SuccessExitStatus=143

StandardOutput=syslog

[Install]
WantedBy=multi-user.target

ExecStartPostコマンドを手動で実行する試み:

$ /usr/bin/Java -Xms1g -Xmx1g -XX:MaxPermSize=1g -XX:OnOutOfMemoryError='kill -9 %%p' -Djava.security.egd=/dev/urandom -cp /opt/puppetlabs/server/apps/puppetserver/puppet-server-release.jar clojure.main -m puppetlabs.trapperkeeper.main --config /etc/puppetlabs/puppetserver/conf.d -b /etc/puppetlabs/puppetserver/bootstrap.cfg

RuntimeError: Got 2 failure(s) while initializing: File[/var/log/puppetlabs/puppetserver]: change from 0700 to 0750 failed: failed to set mode 0700 on /var/log/puppetlabs/puppetserver: Operation not permitted - No message available; File[/var/run/puppetlabs/puppetserver]: change from 0775 to 0755 failed: failed to set mode 0775 on /var/run/puppetlabs/puppetserver: Operation not permitted - No message available

もう一度試してみましたが、今回はディレクトリのアクセス許可をいくつか変更しましたが、同様のエラーが発生しました(モードを変更しただけでは意味がありません)。

$ Sudo chown -R vagrant:vagrant /var/run/puppetlabs/
$ Sudo chown -R vagrant:vagrant /var/log/puppetlabs/
$ Sudo chmod -R 0755 /var/run/puppetlabs/

$ /usr/bin/Java -Xms1g -Xmx1g -XX:MaxPermSize=1g -XX:OnOutOfMemoryError='kill -9 %%p' -Djava.security.egd=/dev/urandom -cp /opt/puppetlabs/server/apps/puppetserver/puppet-server-release.jar clojure.main -m puppetlabs.trapperkeeper.main --config /etc/puppetlabs/puppetserver/conf.d -b /etc/puppetlabs/puppetserver/bootstrap.cfg

OpenJDK 64-Bit Server VM warning: ignoring option MaxPermSize=1g; support was removed in 8.0
RuntimeError: Got 1 failure(s) while initializing: File[/var/run/puppetlabs/puppetserver]: change from 0775 to 0755 failed: failed to set mode 0775 on /var/run/puppetlabs/puppetserver: Operation not permitted - No message available
                use at /opt/puppetlabs/puppet/lib/Ruby/vendor_Ruby/puppet/settings.rb:1007

問題は何でしょうか?

12
lollercoaster

OnOutOfMemoryエラーであると確信していますか?/var/log/messagesの次のメッセージに示されているように、最新のPuppetServerに新しいバージョンのlogbackが含まれていることがわかったので、質問します。

Mar 18 01:56:21 puppetserver Java: Exception in thread "main" Java.lang.AbstractMethodError: ch.qos.logback.core.net.SyslogAppenderBase.createOutputStream()Lch/qos/logback/core/net/SyslogOutputStream;
Mar 18 01:56:21 puppetserver Java: at ch.qos.logback.core.net.SyslogAppenderBase.start(SyslogAppenderBase.Java:62)
Mar 18 01:56:21 puppetserver Java: at ch.qos.logback.classic.net.SyslogAppender.start(SyslogAppender.Java:48)

表示されている場合は、logback.xmlの「classic.net.Syslog」を「core.net.Syslog」に置き換えます。

sed -i_old -e 's/classic.net.Syslog/core.net.Syslog/' /etc/puppetlabs/puppetserver/logback.xml

それが問題でない場合は、ログファイルを投稿してください。

2
Jo Rhett

ログを提供しました

OpenJDK 64ビットサーバーVM警告:オプションMaxPermSize = 1gを無視します; 8.0でサポートが削除されました

したがって、permgenスペースを削除したjdk 8を使用していることは明らかです。

Permanent Generation(PermGen)スペースは完全に削除され、Metaspaceという新しいスペースに置き換えられました。 PermGen削除の結果は、明らかにPermSizeおよびMaxPermSize JVM引数が無視され、_Java.lang.OutOfMemoryError: PermGen error_を取得できないことです。

  1. したがって、場所_-XX:MaxPermSize=1g_の_Java_ARGS_から_/etc/sysconfig/puppetserver_の部分を削除してください

Java_ARGS = "-Xms1g -Xmx1g"

そう

  1. その後、

コマンドは次のようになります。

_$ /usr/bin/Java -Xms1g -Xmx1g -XX:OnOutOfMemoryError='kill -9 %%p' -Djava.security.egd=/dev/urandom -cp /opt/puppetlabs/server/apps/puppetserver/puppet-server-release.jar clojure.main -m puppetlabs.trapperkeeper.main --config /etc/puppetlabs/puppetserver/conf.d -b /etc/puppetlabs/puppetserver/bootstrap.cfg
_

または

_$ /usr/bin/Java -Xms1g -Xmx1g -Djava.security.egd=/dev/urandom -cp /opt/puppetlabs/server/apps/puppetserver/puppet-server-release.jar clojure.main -m puppetlabs.trapperkeeper.main --config /etc/puppetlabs/puppetserver/conf.d -b /etc/puppetlabs/puppetserver/bootstrap.cfg
_

この2つのコマンドを試してください。両方が正常に実行されることを願っています。注意のために、両方を追加しました。

注:ファイルのアクセス許可を変更する必要はありません。使用前と同じように保管してください。

それ以外の場合、何も変更したくない場合は、_Java 8_を_Java 7_にダウングレードできます

関連リンク:

  1. JDK 8でのPermGenの削除
  2. Java HotSpot(TM)64ビットサーバーVM警告:オプションMaxPermSizeを無視しています
  3. Java 8 XX:PERMSIZEおよびXX:MAXPERMSIZE DISAPPEARING
  4. JDK 8マイルストーン
  5. JEP 122:永続的な世代を削除
2
SkyWalker

@lollercoster、あなたはあなたのサービスを次のように始めています:

Sudo puppet resource service puppetserver ensure=running

しかし、あなたの次のコマンドはそれがどのユーザーであるかを教えていません

/usr/bin/Java -Xms1g -Xmx1g -XX:MaxPermSize=1g -XX:OnOutOfMemoryError='kill -9 %%p' -Djava.security.egd=/dev/urandom -cp /opt/puppetlabs/server/apps/puppetserver/puppet-server-release.jar clojure.main -m puppetlabs.trapperkeeper.main --config /etc/puppetlabs/puppetserver/conf.d -b /etc/puppetlabs/puppetserver/bootstrap.cfg

上記のコマンドを実行する直前にwhoamiを実行してください:

whoami
/usr/bin/Java -Xms1g -Xmx1g -XX:MaxPermSize=1g -XX:OnOutOfMemoryError='kill -9 %%p' -Djava.security.egd=/dev/urandom -cp /opt/puppetlabs/server/apps/puppetserver/puppet-server-release.jar clojure.main -m puppetlabs.trapperkeeper.main --config /etc/puppetlabs/puppetserver/conf.d -b /etc/puppetlabs/puppetserver/bootstrap.cfg

なぜこのコマンドなのか?私はあなたの問題がアクセス許可/ユーザーコンテキストの問題であり、次のコマンドがそれをさらに悪化させると確信しています:

$ Sudo chown -R vagrant:vagrant /var/run/puppetlabs/
$ Sudo chown -R vagrant:vagrant /var/log/puppetlabs/
$ Sudo chmod -R 0755 /var/run/puppetlabs/

上記の場合、ファイルを書き込み可能にするには、適切なユーザーコンテキストでSudoを実行する必要がありますが、他のデータが書き込み可能かどうかによって異なります。試してみることができますが、サービス用に作成されたパペットユーザーを使用します

User=puppet

したがって、puppetサービスはユーザーpuppetとして実行されますが、ログファイルはvagrant user controlの下にあり、puppetユーザーには書き込みできません。

だから私はまたに切り替えようとします:

$ Sudo chown -R puppet /var/run/puppetlabs/
$ Sudo chown -R puppet /var/log/puppetlabs/
$ Sudo chmod -R 0755 /var/run/puppetlabs/

Java

また、JVMヒープパラメータをいじらないでください。 Java VMヒープの下限と最大範囲をJDK5以降に強制する必要がないため、上限のみに制限します。

-Xmx1g

ヒープと実際に割り当てられたメモリは、javaVMによって適切に管理されます。 JVMはさらに必要とするため、段階的にヒープを増やし、必要なサイズを維持します(低い値へのダウンサイジングは発生しません)。だからあなたはあなたのマシンでよりよく使われるRAM=.

また、Oracle JVMに切り替えてください。私はセキュリティとOpenJDKとの互換性の問題にしばしば直面しています。私の最初のテストは、最新の必要なOracleのJDKで実行することです。あなたの場合、Oracle JDK8。ただし、先に述べた許可を最初に試してください。

頑張ってください、そして私に最新の状態を保ってください。

1
cilap
/usr/bin/Java -Xms1g -Xmx1g -XX:MaxPermSize=1g 

XmsとXmsはMaxPermSize未満です。これでうまくいきました。

0

この動作は以前に見たことがあります。 権限を台無しにするので、rootとしてコマンドを手動で実行しないでください。代わりにjournalctl -xeを使用してログを注意深く読み、サービスが失敗する理由を理解してください。私の場合、すでに秘密鍵がありましたが、まだ公開証明書がなかったため、puppetserverサービスを開始できませんでした。

ls /etc/puppetlabs/puppet/ssl/certs/`hostname -f`.pem
ls /etc/puppetlabs/puppet/ssl/private_keys/`hostname -f`.pem

どちらか一方が存在し、もう一方が存在しない場合、サービスは起動に失敗します。ログファイルに次のようなものが表示されます。

Exception in thread "main" Java.lang.IllegalStateException: Cannot initialize master with partial state; need all files or none.

puppetserverを初めてインストールする場合、既存のデプロイメントを中断する方法がないため、既存の秘密鍵を削除するだけで、puppetserverが自動的に新しいペア。

rm /etc/puppetlabs/puppet/ssl/certs/`hostname -f`.pem
rm /etc/puppetlabs/puppet/ssl/private_keys/`hostname -f`.pem

そして最後にもう一度puppetserverサービスを開始してください。

service puppetserver start
0
Thomas Lobker