使用gerrit账户在centos上安装gerrit,然后集成gitweb,gerrit服务启动失败,查看日志,报错信息如下:

[-- ::,] ERROR com.google.gerrit.pgm.Daemon : Unable to start daemon
java.lang.IllegalStateException: Cannot start HTTP daemon
at com.google.gerrit.pgm.http.jetty.JettyServer$Lifecycle.start(JettyServer.java:)
at com.google.gerrit.lifecycle.LifecycleManager.start(LifecycleManager.java:)
at com.google.gerrit.pgm.Daemon.start(Daemon.java:)
at com.google.gerrit.pgm.Daemon.run(Daemon.java:)
at com.google.gerrit.pgm.util.AbstractProgram.main(AbstractProgram.java:)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:)
at java.lang.reflect.Method.invoke(Method.java:)
at com.google.gerrit.launcher.GerritLauncher.invokeProgram(GerritLauncher.java:)
at com.google.gerrit.launcher.GerritLauncher.mainImpl(GerritLauncher.java:)
at com.google.gerrit.launcher.GerritLauncher.main(GerritLauncher.java:)
at Main.main(Main.java:)
Caused by: com.google.inject.ProvisionException: Unable to provision, see the following errors: ) Error injecting constructor, java.io.IOException: Permission denied
at com.google.gerrit.httpd.gitweb.GitWebServlet.<init>(GitWebServlet.java:)
at com.google.gerrit.httpd.gitweb.GitWebServlet.class(GitWebServlet.java:)
while locating com.google.gerrit.httpd.gitweb.GitWebServlet error
at com.google.inject.internal.InjectorImpl$.get(InjectorImpl.java:)
at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:)
at com.google.inject.servlet.ServletDefinition.init(ServletDefinition.java:)
at com.google.inject.servlet.ManagedServletPipeline.init(ManagedServletPipeline.java:)
at com.google.inject.servlet.ManagedFilterPipeline.initPipeline(ManagedFilterPipeline.java:)
at com.google.inject.servlet.GuiceFilter.init(GuiceFilter.java:)
at org.eclipse.jetty.servlet.FilterHolder.initialize(FilterHolder.java:)
at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:)
at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:)
at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:)
at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:)
at org.eclipse.jetty.server.Server.start(Server.java:)
at org.eclipse.jetty.server.Server.doStart(Server.java:)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:)
at com.google.gerrit.pgm.http.jetty.JettyServer$Lifecycle.start(JettyServer.java:)
... more
Caused by: java.io.IOException: Permission denied
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.createTempFile(File.java:)
at com.google.gerrit.httpd.gitweb.GitWebServlet.makeSiteConfig(GitWebServlet.java:)
at com.google.gerrit.httpd.gitweb.GitWebServlet.<init>(GitWebServlet.java:)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:)
at java.lang.reflect.Constructor.newInstance(Constructor.java:)
at com.google.inject.internal.DefaultConstructionProxyFactory$.newInstance(DefaultConstructionProxyFactory.java:)
at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:)
at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:)
at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:)
at com.google.inject.internal.ProviderToInternalFactoryAdapter$.call(ProviderToInternalFactoryAdapter.java:)
at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:)
at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:)
at com.google.inject.Scopes$$.get(Scopes.java:)
at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:)
at com.google.inject.internal.InjectorImpl$$.call(InjectorImpl.java:)
at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:)
at com.google.inject.internal.InjectorImpl$.get(InjectorImpl.java:)
... more

gerrit的安装路径是/home/gerrit/gerrit_site,

查看gerrit_site的权限和属主,可能是之前的误操作,gerrit_site目录的属主不是gerrit:gerrit,而是777:gerrit。

执行命令:chown -R gerrit:gerrit gerrit_site

修改目录权限后,重启gerrit服务,正常运行。

over!

04-17 17:38