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

问题解决

相关推荐
测开小菜鸟31 分钟前
使用python向钉钉群聊发送消息
java·python·钉钉
心灵彼岸-诗和远方1 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
一只哒布刘1 小时前
NFS服务器
运维·服务器
P.H. Infinity1 小时前
【RabbitMQ】04-发送者可靠性
java·rabbitmq·java-rabbitmq
生命几十年3万天2 小时前
java的threadlocal为何内存泄漏
java
caridle2 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
^velpro^2 小时前
数据库连接池的创建
java·开发语言·数据库
苹果醋32 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
秋の花2 小时前
【JAVA基础】Java集合基础
java·开发语言·windows
小松学前端2 小时前
第六章 7.0 LinkList
java·开发语言·网络