Puppetserver服务无法启动

时间:2016-03-17 21:07:33

标签: java vagrant puppet

我有一个Vagrant CentOS虚拟机,运行时分配了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

可能是什么问题?

5 个答案:

答案 0 :(得分:2)

您确定它是OnOutOfMemory错误吗?我问,因为我发现最新的PuppetServer包含更新版本的logback,如/ var / log / messages中的此消息所示:

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)

如果你看到,这将用“core.net.Syslog”替换logback.xml中的“classic.net.Syslog”

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

如果这不是问题,请发布您的日志文件。

答案 1 :(得分:2)

您已将日志提供为

  

OpenJDK 64位服务器VM警告:忽略选项MaxPermSize = 1g;   支持已在8.0中删除

所以,很明显你使用的是jdk 8来移除permgen空间。

永久生成(PermGen)空间已被完全删除,并被一个名为Metaspace的新空间所取代。删除PermGen的后果是显然会忽略PermSize和MaxPermSize JVM参数,并且永远不会得到java.lang.OutOfMemoryError: PermGen error

  1. 因此,请从位置-XX:MaxPermSize=1g
  2. JAVA_ARGS移除/etc/sysconfig/puppetserver部分
      

    JAVA_ARGS =" -Xms1g -Xmx1g"

    所以

    1. 然后,
    2. 你的命令如下所示:

      $ /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
      

      请尝试这两个命令。我希望两者都能成功运行。为了谨慎起见,我添加了两个。

      N.B:无需更改文件权限。在你使用之前保持它们。

      否则,如果您不想更改任何内容,可以将java 8降级为java 7

      相关链接:

      1. PermGen elimination in JDK 8
      2. Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize
      3. JAVA 8 XX:PERMSIZE AND XX:MAXPERMSIZE DISAPPEARING
      4. JDK 8 Milestones
      5. JEP 122: Remove the Permanent Generation

答案 2 :(得分:1)

@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

所以你的木偶服务作为用户木偶运行,但你的日志文件是在流浪者用户控制之下,而不是木偶用户可写的。

所以我也会尝试切换回:

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

<强>爪哇

另外,我建议你不要乱用JVM堆参数,除非你知道你做了什么。因为自JDK5以来您不需要在Java VM堆上强制执行较低和最大限制。我只会限制上限

-Xmx1g

javaVM将很好地管理堆和实际分配的mem。由于JVM需要更多,它将逐步增加堆并保持所需的大小(不会缩小到较低的值)。因此,您的计算机上将使用更好的RAM。

另请切换到Oracle JVM。我经常遇到与OpenJDK的安全性和兼容性问题。所以我的第一个测试是在最新所需的Oracle JDK上运行它。在您的情况下Oracle JDK8。 但请先尝试我之前提到的许可事项。

祝你好运,请让我更新。

答案 3 :(得分: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

答案 4 :(得分:0)

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

Xms和Xms小于MaxPermSize。这对我有用。