Jenkins无法通过SSH启动Slave Agent:夜间断开后无法重连
解决Jenkins SSH Slave集体断开且启动失败的问题
我之前也碰到过类似的SSH Slave突然集体挂掉的情况,结合你给出的错误日志和已做的排查(版本兼容、Slave进程无残留),给你几个针对性的排查和修复方向:
1. 排查Slave端的目录与文件权限问题
虽然之前运行正常,但系统更新、用户权限变更都可能导致权限异常:
- 执行命令检查Jenkins Slave工作目录的权限:
确保运行Slave的ls -ld /home/ubuntu/jenkins_slaveubuntu用户拥有该目录的读写权限。 - 检查
slave.jar文件是否存在且可读取:
如果文件丢失或权限不足,重新从Master端的ls -l /home/ubuntu/jenkins_slave/slave.jar/var/lib/jenkins/war/WEB-INF/slave.jar路径下载一份到Slave对应目录。
2. 手动在Slave端运行Slave进程,直接捕获错误
目前你只能看到Master端的EOF异常,手动执行能直接获取Slave端的报错信息:
- 从Master服务器SSH登录到任意一台Slave机器
- 执行启动命令:
此时如果进程报错(比如Java依赖缺失、内存不足、配置文件错误),会直接在终端输出,这是定位问题最直接的方式。cd /home/ubuntu/jenkins_slave && java -jar slave.jar
3. 检查SSH连接与网络层面的异常
- 查看Slave端的SSH认证日志(Ubuntu系统路径为
/var/log/auth.log),搜索是否有连接时的权限拒绝、连接中断等异常记录,排查是否有防火墙规则变更或SSH服务配置修改。 - 验证Master与Slave之间的Jenkins远程通信端口(默认是50000)是否通畅:
在Slave端执行:
如果无法连通,检查Master端防火墙是否开放了该端口,或者网络路由是否出现异常。telnet <你的Master服务器IP> 50000
4. 排查Java运行环境与系统资源问题
- 确认Slave端的Java环境未被篡改:执行
java -version和echo $JAVA_HOME,确保确实是Java 1.7,且环境变量配置正确。 - 检查Slave端的临时目录(
/tmp)磁盘空间:
Jenkins Slave运行时需要写入临时文件,若df -h /tmp/tmp目录满了会导致进程启动失败。
5. 尝试重启Jenkins Master服务
有时候Master端的远程连接池出现异常,会导致所有Slave无法正常建立连接。可以尝试重启Master的Jenkins服务,之后再重新启动Slave Agent。
附你提供的Master端错误日志:
[01/05/18 16:27:13] [SSH] Starting slave process: cd "/home/ubuntu/jenkins_slave" && java -jar slave.jar <===[JENKINS REMOTING CAPACITY]===>channel started Slave JVM has not reported exit code. Is it still running? [01/05/18 16:27:20] Launch failed - cleaning up connection [01/05/18 16:27:20] [SSH] Connection closed. ERROR: Connection terminated java.io.EOFException at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2638) at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3113) at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:853) at java.io.ObjectInputStream.<init>(ObjectInputStream.java:349) at hudson.remoting.ObjectInputStreamEx.<init>(ObjectInputStreamEx.java:48) at hudson.remoting.AbstractSynchronousByteArrayCommandTransport.read(AbstractSynchronousByteArrayCommandTransport.java:34) at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:59) Caused: java.io.IOException: Unexpected termination of the channel at hudson.remoting.SynchronousCommandTransport$ReaderThread.run(SynchronousCommandTransport.java:73)
内容的提问来源于stack exchange,提问作者Einsbein
相关产品推荐
相关产品推荐

