【systemctl start jenkins】启动报错问题解决

问题说明,最终是在jenkins.service中配置JAVA_HOME解决的,但是我的服务器环境中确定已经配置好了Java环境变量,并且java -version也能正常打印信息,不清楚为什么jenkins.service无法读取配置

1.环境配置说明

服务器:阿里云ECS

操作系统:CentOS 7.9

目前最新的Jenkins已经不支持CentOS7了,需要更换更新的版本

Jenkins版本:2.462.2

2.安装过程说明

参考官网的安装指南进行安装:

https://www.jenkins.io/doc/book/installing/linux/#red-hat-centos

shell 复制代码
sudo wget -O /etc/yum.repos.d/jenkins.repo \
    https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key
sudo yum upgrade
# Add required dependencies for the jenkins package
sudo yum install fontconfig
sudo yum install jenkins
sudo systemctl daemon-reload
sudo systemctl enable jenkins
sudo systemctl start jenkins

由于服务器上安装过JDK17了,这里就没有再次安装

3.切换到jenkins用户

通过yum安装好Jenkins之后,为了减少安全风险,我计划使用jenkins用户来启动Jenkins,而不是root用户

首先通过su - jenkins切换到jenkins用户,但发现并没有任何变化

通过whoami指令查看当前用户,发现仍旧停留在root用户

此时通过检查用户权限以及shell配置来解决该问题:

  1. 检查用户权限:sudo passwd -S jenkins,提示信息如下:
plain 复制代码
jenkins LK 2024-09-13 -1 -1 -1 -1 (Password locked.)

说明此时jenkins用户被锁定

  1. 检查 /etc/passwdjenkins 用户的 shell 是否有效:grep jenkins /etc/passwd,结果如下:
plain 复制代码
jenkins:x:997:995:Jenkins Automation Server:/var/lib/jenkins:/bin/false

/bin/false表示 jenkins 用户的登录 shell 是一个无效的 shell,用户无法通过终端登录

于是我们通过以下指令来授予相关权限:

powershell 复制代码
# 1.设置用户密码
sudo passwd jenkins 

# 2.解锁用户
sudo passwd -u jenkins

# 更改登录 shell
sudo usermod -s /bin/bash jenkins

此时为了使得jenkins用户能够使用sudo指令,在/etc/sudoers文件中赋予相关权限:

powershell 复制代码
jenkins ALL=(ALL) NOPASSWD: ALL

如下图所示:

4.启动jenkins

执行systemctl start jenkins来启动Jenkins时出错,但是执行java -jar /usr/share/java/jenkins.war可以正常启动,报错内容如下:

plain 复制代码
jenkins.service - Jenkins Continuous Integration Server
   Loaded: loaded (/usr/lib/systemd/system/jenkins.service; disabled; vendor preset: disabled)
   Active: failed (Result: start-limit) since Mon 2024-09-23 15:21:50 CST; 1h 7min ago
 Main PID: 11921 (code=exited, status=203/EXEC)

Sep 23 15:21:50 WHY6666 systemd[1]: Failed to start Jenkins Continuous Integration Server.
Sep 23 15:21:50 WHY6666 systemd[1]: Unit jenkins.service entered failed state.
Sep 23 15:21:50 WHY6666 systemd[1]: jenkins.service failed.
Sep 23 15:21:50 WHY6666 systemd[1]: jenkins.service holdoff time over, scheduling restart.
Sep 23 15:21:50 WHY6666 systemd[1]: Stopped Jenkins Continuous Integration Server.
Sep 23 15:21:50 WHY6666 systemd[1]: start request repeated too quickly for jenkins.service
Sep 23 15:21:50 WHY6666 systemd[1]: Failed to start Jenkins Continuous Integration Server.
Sep 23 15:21:50 WHY6666 systemd[1]: Unit jenkins.service entered failed state.
Sep 23 15:21:50 WHY6666 systemd[1]: jenkins.service failed.

这里我们可以看到错误状态是:status=203/EXEC,这个错误通常表示服务的执行文件无法找到或无法执行

于是我们合理猜测,原因可能有这些:

  1. ExecStart配置问题:需要打开/usr/lib/systemd/system/jenkins.service文件,确保 ExecStart指向正确的 Jenkins 可执行文件
  2. 目标目录的执行权限不够(如WorkingDirectory以及jenkins.war等)
  3. 没有安装Java环境
  4. 定义的WorkingDirectory路径错误

于是首先检查ExecStart配置和WorkingDirectory路径

打开/usr/lib/systemd/system/jenkins.service文件,配置如下:

bash 复制代码
ExecStart=/usr/bin/jenkins
WorkingDirectory=/var/lib/jenkins

说明这两项没有问题

然后赋予相关目录的执行权限:

bash 复制代码
sudo chown -R jenkins:jenkins /var/lib/jenkins
sudo chown jenkins:jenkins /usr/share/java/jenkins.war

不同版本的jenkins.war路径可能不同,可以通过sudo find / -name jenkins.war进行查找

进行以上配置发现问题还未解决,无奈之下在jenkins.service文件中再次进行JAVA_HOME的配置:

bash 复制代码
Environment="JAVA_HOME=/www/server/java/jdk-17.0.8"

问题解决

相关推荐
上元星如雨4 分钟前
详解C++的存储区
java·开发语言·c++
qq_4336184433 分钟前
linux 下的termios读写
linux·运维·服务器
Watink Cpper33 分钟前
[Linux] 信号(singal)详解(二):信号管理的三张表、如何使用coredump文件、OS的用户态和内核态、如何理解系统调用?
linux·运维·服务器·信号
手捧向日葵的话语38 分钟前
Linux下的进程切换与调度
linux·运维·服务器
嵌入式学习菌1 小时前
常见的排序算法:插入排序、选择排序、冒泡排序、快速排序
java·算法·排序算法
亥时科技1 小时前
旅游全域体验系统(源码+文档+部署+讲解)
java·数据库·开源·旅游·源代码管理
周全全1 小时前
CentOS7 安装配置FTP服务
运维·arm开发·centos·ftp·linu
lovebugs1 小时前
ArrayList 源码扩容机制全解析
java·后端·面试
许苑向上1 小时前
Spring MVC 拦截器(Interceptor)与过滤器(Filter)的区别?
java·spring·mvc
skinGap1 小时前
Jenkins设置防火墙规则允许访问本机IP端口
tcp/ip·jenkins