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

问题解决

相关推荐
降世神童2 分钟前
华为云Flexus+DeepSeek征文| 使用华为云CCE容器部署Dify-LLM高可用方案的验证与测试
运维·华为云·aigc
降世神童3 分钟前
华为云Flexus+DeepSeek征文| 基于华为云Dify-LLM高可用平台开发运维故障处理智能体
运维·华为云·aigc
深栈解码24 分钟前
JMM深度解析(三) volatile实现机制详解
java·后端
liujing1023292935 分钟前
Day04_刷题niuke20250703
java·开发语言·算法
Brookty38 分钟前
【MySQL】JDBC编程
java·数据库·后端·学习·mysql·jdbc
能工智人小辰1 小时前
二刷 苍穹外卖day10(含bug修改)
java·开发语言
DKPT1 小时前
Java设计模式之结构型模式(外观模式)介绍与说明
java·开发语言·笔记·学习·设计模式
缘来是庄1 小时前
设计模式之外观模式
java·设计模式·外观模式
好名字更能让你们记住我1 小时前
Linux多线程(十二)之【生产者消费者模型】
linux·运维·服务器·jvm·windows·centos
门思科技1 小时前
设计可靠 LoRaWAN 设备时需要考虑的关键能力
运维·服务器·网络·嵌入式硬件·物联网