Служба Puppetserver не запускается

У меня есть Vagrant CentOS VM, работающая с выделенной операцией ps.memory = 2048.

Когда я пытаюсь запустить службу 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}" [email protected]

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

В чем может быть проблема?

Ответ 1

Вы уверены, что это ошибка 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)

Если вы видите, это заменит "classic.net.Syslog" в logback.xml с "core.net.Syslog"

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

Если это не проблема, отправьте свои лог файлы.

Ответ 2

Вы предоставили журнал как

OpenJDK 64-битное предупреждение сервера VM: игнорирование опции MaxPermSize = 1g; поддержка удалена в 8.0

Итак, понятно, что вы используете jdk 8, который удалил пространство перменто.

Пространство постоянного поколения (PermGen) полностью удалено и заменено новым пространством под названием Metaspace. Последствия удаления PermGen состоят в том, что очевидно, что аргументы JVM PermSize и MaxPermSize игнорируются, и вы никогда не получите java.lang.OutOfMemoryError: PermGen error.

  • Поэтому, пожалуйста, удалите -XX:MaxPermSize=1g часть из JAVA_ARGS местоположения /etc/sysconfig/puppetserver

JAVA_ARGS = "- Xms1g -Xmx1g"

So

  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

Попробуйте две команды. Я надеюсь, что оба они будут успешно работать. Для предосторожности я добавил оба.

N.B: Нет необходимости изменять разрешение файла. держите их так же, как и раньше.

В противном случае, если вы не хотите ничего менять, вы можете понизить java 8 до java 7

Связанная ссылка:

Ответ 3

@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

Почему это команды? Я довольно уверен, что ваша проблема - это проблема разрешения /usercontext, а следующие команды делают ее хуже:

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

Java

Также я предлагаю вам НЕ возиться с параметрами кучи JVM, кроме того, что вы знаете, что делаете. Поскольку вам не нужно принудительно применять нижнюю и максимальную границы кучи Java VM с JDK5. Я бы ограничил только верхнюю границу

-Xmx1g

Куча и реальная выделенная память будут хорошо управляться javaVM. Поскольку JVM нуждается в большем количестве, шаг за шагом будет увеличивать кучу и поддерживать необходимый размер (без уменьшения до более низкого значения). Таким образом, у вас будет более оперативная память на вашем компьютере.

Также перейдите в Oracle JVM. Я часто сталкиваюсь с проблемами безопасности и совместимости с OpenJDK. Поэтому мой первый тест - запустить его на последнем необходимом JDK Oracle. В вашем случае Oracle JDK8. Но сначала попробуйте разрешения, о которых я упоминал раньше.

Удачи, и, пожалуйста, держите меня в курсе.

Ответ 4

Я видел это поведение раньше. Не пытайтесь запускать команды вручную как 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