說下背景:
使用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