Debian 8中openSIPS启动早于MySQL致启动失败,修改脚本仍无效求助
解决Debian 8.10中openSIPS因启动早于MySQL导致的启动失败问题
问题根源
Debian 8.10采用SysVinit初始化系统时,openSIPS的默认启动脚本没有正确声明对MySQL的依赖关系,导致系统启动流程中openSIPS先于MySQL启动,无法连接数据库进而启动失败;而系统完全启动后手动启动时,MySQL已经就绪,所以能正常运行。
正确修复步骤
1. 修正openSIPS初始化脚本的依赖声明
编辑/etc/init.d/opensips文件,找到脚本开头的### BEGIN INIT INFO至### END INIT INFO注释块,修改Required-Start字段,添加mysql(如果用的是MariaDB则替换为mariadb)。
原注释块示例:
### BEGIN INIT INFO # Provides: opensips # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: OpenSIPS SIP server ### END INIT INFO
修改后:
### BEGIN INIT INFO # Provides: opensips # Required-Start: $remote_fs $syslog mysql # Required-Stop: $remote_fs $syslog mysql # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: OpenSIPS SIP server ### END INIT INFO
2. 更新启动顺序配置
执行命令让SysVinit重新识别依赖并调整启动顺序:
insserv -v opensips
3. 验证启动顺序
可以通过查看启动链接的序号确认顺序是否正确:
ls /etc/rc2.d/S*opensips
输出的序号(比如S25opensips)应该大于MySQL的启动链接序号(比如S20mysql),这样就能保证MySQL先完成启动。
应急备选方案(不推荐长期使用)
如果修改依赖仍未生效,可以临时在openSIPS启动脚本的start函数中添加延迟,给MySQL足够的启动时间:
找到start()函数内的启动命令,在其前添加sleep语句:
sleep 10 start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS
之前操作失效的可能原因
大概率是你修改的初始化信息中,没有正确匹配MySQL的服务名称(比如实际用的是MariaDB,服务名是mariadb而非mysql),或者依赖字段修改不完整,导致insserv没有正确调整启动顺序。
内容的提问来源于stack exchange,提问作者Laci K
相关产品推荐
相关产品推荐

