【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"

问题解决

相关推荐
骑士雄师25 分钟前
Java 泛型中级面试题及答案
java·开发语言·面试
万山y1 小时前
WSL SSH 服务器一站式配置教程
运维·服务器·ssh
半梦半醒*1 小时前
Prometheus监控物理服务器
linux·运维·服务器·centos·prometheus
恒创科技HK1 小时前
高防服务器分为哪几种?香港高防服务器有什么特点?
运维·服务器·安全
黑马金牌编程1 小时前
如何判断一台服务器是否负载过高?
linux·运维·性能调优·性能分析·故障排查
WnHj1 小时前
DORIS 服务器宕机重启后出现的问题
运维·服务器
小锋学长生活大爆炸2 小时前
【知识】Linux将多条指令合并为一条执行
linux·运维·ubuntu
心灵宝贝5 小时前
CentOS 7 安装 bzip2-libs-1.0.6-13.el7.x86_64.rpm 的详细步骤
linux·运维·centos
.格子衫.6 小时前
Spring Boot 原理篇
java·spring boot·后端
九皇叔叔6 小时前
Linux Shell 函数:从定义到实战,让脚本更高效
linux·运维·chrome·shell