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

问题解决

相关推荐
倔强的胖蚂蚁几秒前
Ollama 大模型参数调整
运维·人工智能·云原生
凤年徐几秒前
【Linux从入门到进阶】打包压缩、跨平台互传、内核版本、热键历史、关机与Shell原理一篇全搞定
linux·运维·服务器
Seven97几秒前
【从0到1构建一个ClaudeAgent】协作-Agent团队
java
郝学胜-神的一滴2 分钟前
[系统设计] 新鲜事系统:写扩散与读扩散的实现与对比
java·设计模式·php·软件构建·需求分析·软件设计·系统设计
i建模2 分钟前
Linux 服务器上配置 XFCE 桌面以实现远程登录
linux·运维·服务器
斌味代码2 分钟前
Elasticsearch 性能调优实战:内存管理、连接池与查询优化全指南
大数据·elasticsearch·jenkins
AI先驱体验官4 分钟前
BotCash:AI智能体知识管理新基建,GitNexus带来的技术范式转移
大数据·运维·人工智能·aigc·交互
辰风沐阳1 小时前
nvm - node 版本管理工具【macOS/Linux】
linux·运维·macos
疯狂成瘾者1 小时前
LangChain4j ApacheTikaDocumentParser:多格式文档接入的统一入
java·langchain4j
黄焖鸡能干四碗2 小时前
企业元数据梳理和元数据管理方案(PPT方案)
大数据·运维·网络·分布式·spark