Rundeck社区版从3.4.0升级至4.8.0后服务无法启动
Rundeck社区版3.4.0升级至4.8.0后服务无法启动问题
将Rundeck社区版3.4.0通过.deb安装包升级到4.8.0版本后,服务无法正常运行。
服务状态信息
● rundeckd.service - LSB: rundeck job automation console Loaded: loaded (/etc/init.d/rundeckd; generated) Active: failed (Result: exit-code) since Sat 2023-02-18 13:35:29 IST; 19min ago Docs: man:systemd-sysv-generator(8) Process: 64462 ExecStart=/etc/init.d/rundeckd start (code=exited, status=0/SUCCESS) Main PID: 64472 (code=exited, status=1/FAILURE) Feb 18 13:35:04 dockermachine systemd[1]: Starting LSB: rundeck job automation console... Feb 18 13:35:04 dockermachine rundeckd[64462]: * Starting rundeckd Feb 18 13:35:04 dockermachine rundeckd[64462]: ...done. Feb 18 13:35:04 dockermachine systemd[1]: Started LSB: rundeck job automation console. Feb 18 13:35:29 dockermachine systemd[1]: rundeckd.service: Main process exited, code=exited, status=1/FAILURE Feb 18 13:35:29 dockermachine systemd[1]: rundeckd.service: Failed with result 'exit-code'.
Service.log日志内容
[2023-02-18T13:35:11,169] INFO rundeckapp.Application - 当前激活的配置文件为:"production" 正在配置Spring Security Core... ... Spring Security Core配置完成 [2023-02-18T13:35:26,201] ERROR pool.ConnectionPool - 无法创建连接池初始连接。 org.h2.jdbc.JdbcSQLNonTransientException: 通用错误: "写入格式1小于支持的格式2 [2.1.210/5]" [50000-210] at org.h2.message.DbException.getJdbcSQLException(DbException.java:573) ~[h2-2.1.210.jar!/:?] at org.h2.message.DbException.getJdbcSQLException(DbException.java:496) ~[h2-2.1.210.jar!/:?] at org.h2.message.DbException.get(DbException.java:216) ~[h2-2.1.210.jar!/:?] at org.h2.mvstore.db.Store.convertMVStoreException(Store.java:166) ~[h2-2.1.210.jar!/:?] at org.h2.mvstore.db.Store.<init>(Store.java:140) ~[h2-2.1.210.jar!/:?] at org.h2.engine.Database.<init>(Database.java:324) ~[h2-2.1.210.jar!/:?] at org.h2.engine.Engine.openSession(Engine.java:92) ~[h2-2.1.210.jar!/:?] at org.h2.engine.Engine.openSession(Engine.java:222) ~[h2-2.1.210.jar!/:?] at org.h2.engine.Engine.createSession(Engine.java:201) ~[h2-2.1.210.jar!/:?] at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:338) ~[h2-2.1.210.jar!/:?] at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:122) ~[h2-2.1.210.jar!/:?] at org.h2.Driver.connect(Driver.java:59) ~[h2-2.1.210.jar!/:?] at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:319) ~[tomcat-jdbc-9.0.44.jar!/:?] at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:212) ~[tomcat-jdbc-9.0.44.jar!/:?] at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:744) ~[tomcat-jdbc-9.0.44.jar!/:?] at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:676) ~[tomcat-jdbc-9.0.44.jar!/:?] at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:483) ~[tomcat-jdbc-9.0.44.jar!/:?] at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:154) ~[tomcat-jdbc-9.0.44.jar!/:?] at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:118) ~[tomcat-jdbc-9.0.44.jar!/:?] at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:107) ~[tomcat-jdbc-9.0.44.jar!/:?] at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:131) ~[tomcat-jdbc-9.0.44.jar!/:?] at org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy.afterPropertiesSet(LazyConnectionDataSourceProxy.java:164) ~[spring-jdbc-5.3.20.jar!/:5.3.20] at org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy.<init>(LazyConnectionDataSourceProxy.java:108) ~[spring-jdbc-5.3.20.jar!/:5.3.20] at org.grails.datastore.gorm.jdbc.connections.DataSourceConnectionSourceFactory.proxy(DataSourceConnectionSourceFactory.java:100) ~[grails-datastore-gorm-7.2.1.jar!/:?] at org.grails.datastore.gorm.jdbc.connections.DataSourceConnectionSourceFactory.create(DataSourceConnectionSourceFactory.java:93) ~[grails-datastore-gorm-7.2.1.jar!/:?] at org.grails.datastore.gorm.jdbc.connections.CachedDataSourceConnectionSourceFactory.create(CachedDataSourceConnectionSourceFactory.java:37) ~[grails-datastore-gorm-7.2.1.jar!/:?]
问题分析与解决步骤
问题根源
日志中的错误信息明确指向H2数据库版本兼容性问题:Rundeck 3.4.0使用的低版本H2生成了v1格式的数据库文件,而升级后的Rundeck 4.8.0搭载的H2 2.1.210版本仅支持v2及以上格式,无法直接读取旧格式文件。
解决步骤
备份数据库文件
默认H2数据库文件路径为/var/lib/rundeck/data/rundeckdb.mv.db,先执行备份:sudo cp /var/lib/rundeck/data/rundeckdb.mv.db /var/lib/rundeck/data/rundeckdb.mv.db.backup修改数据库连接配置
编辑/etc/rundeck/rundeck-config.properties文件,找到dataSource.url配置项,在末尾添加兼容参数:dataSource.url = jdbc:h2:file:/var/lib/rundeck/data/rundeckdb;MODE=LEGACY;DATABASE_TO_LOWER=TRUE;AUTO_SERVER=TRUE启动服务并验证
sudo systemctl start rundeckd sudo systemctl status rundeckd服务启动成功后,H2会自动将旧格式数据库文件升级为新版本支持的格式。
(可选)移除兼容参数
服务稳定运行后,可删除配置中的MODE=LEGACY参数,使用H2新版本默认配置,避免后续兼容性隐患。
内容的提问来源于stack exchange,提问作者Riya
相关产品推荐
相关产品推荐

