说下背景:
使用systemctl start jenkins后,再使用lsof -i:8080查看端口状态(也可以使用netstat -tunlp|grep 8080),并没有信息,也就是没有监听8080端口(我的是8080,看自己的而定)。
查找原因
OK,遇见问题我们就解决问题,我们先来看下jenkins的日志:
#进入jenkins日志目录
cd /var/log/jenkins
#查看日志
cat jenkins.log
可以看到日志有报错,我们可以清楚看到java.io.FileNotFoundException: /var/cache/jenkins/war/META-INF/MANIFEST.MF (Permission denied),Permission denied的意思就是没有权限,到这里我们就找到原因了,就是没有把 /var/cache/jenkins的权限赋予给用户,解决办法就是给用户赋权,不想看日志的可直接看最下面的解决办法。
报错摘要如下:
2020-04-16 03:09:31.292+0000 [id=1] WARNING winstone.Logger#logInternal: Failed to delete dirs /var/cache/jenkins/war
java.nio.file.AccessDeniedException: /var/cache/jenkins/war
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.implDelete(UnixFileSystemProvider.java:244)
at sun.nio.fs.AbstractFileSystemProvider.deleteIfExists(AbstractFileSystemProvider.java:108)
at java.nio.file.Files.deleteIfExists(Files.java:1165)
at winstone.HostConfiguration.deleteRecursive(HostConfiguration.java:330)
at winstone.HostConfiguration.getWebRoot(HostConfiguration.java:265)
at winstone.HostConfiguration.<init>(HostConfiguration.java:84)
at winstone.HostGroup.initHost(HostGroup.java:66)
at winstone.HostGroup.<init>(HostGroup.java:45)
at winstone.Launcher.<init>(Launcher.java:167)
at winstone.Launcher.main(Launcher.java:355)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at Main._main(Main.java:375)
at Main.main(Main.java:151)
2020-04-16 03:09:31.360+0000 [id=1] SEVERE winstone.Logger#logInternal: Container startup failed
java.io.FileNotFoundException: /var/cache/jenkins/war/META-INF/MANIFEST.MF (Permission denied)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:162)
at winstone.HostConfiguration.getWebRoot(HostConfiguration.java:299)
at winstone.HostConfiguration.<init>(HostConfiguration.java:84)
at winstone.HostGroup.initHost(HostGroup.java:66)
at winstone.HostGroup.<init>(HostGroup.java:45)
at winstone.Launcher.<init>(Launcher.java:167)
at winstone.Launcher.main(Launcher.java:355)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at Main._main(Main.java:375)
at Main.main(Main.java:151)
解决办法:
添加用户并修改jenkins用户(已添加过的不用添加):
#添加用户,自定义名称即可
useradd qixingcxy
#修改jenkins配置,修改为刚添加的用户
vim /etc/sysconfig/jenkins
找到JENKINS_USER修改为JENKINS_USER="qixingcxy"
为用户赋权(下面三个缺一个可能就会报错):
#chown将指定文件的拥有者改为指定的用户或组,chown[选项]...[所有者][:[组]]文件
chown -R qixingcxy:qixingcxy /var/lib/jenkins
chown -R qixingcxy:qixingcxy /var/log/jenkins
chown -R qixingcxy:qixingcxy /var/cache/jenkins