[Problem one]服务自启动导致无法找到动态库文件
来源:互联网 发布:unity3d游戏大全 编辑:程序博客网 时间:2024/06/03 14:31
前言
这个标题定的有点大了,该问题并不具有通用性,只是解决方案可能会有一定的参考意义。主要还是想记录下工作中遇到的问题以及在解决问题的过程中发散思考学习到的一些知识。
问题说明
系统版本:Linux REHL7.3
事件缘由:tomcat设置自启动
设置tomcat自启动方式:
有很多方式,比如注册tomcat服务,添加shell脚本,可以参考我的一篇博客《Linux下Tomcat开机自动启动》
这里采用的是以下方式:
1) vi /etc/rc.d/rc.local
2) 添加以下内容:
export JAVA_HOME=/usr/local/java/usr/local/tomcat/bin/startup.sh
诱发问题:Oracle动态库找不到:sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory
解决历程
1️⃣ 第一感觉是,sqlplus所依赖的动态库不存在,因为该机器上没有安装Oracle服务器,仅安装了Oracle客户端,于是先测试:
sqlplus /nolog
发现执行正常,全局搜索该动态库是否存在:
find / -name libsqlplus.so
动态库也存在,于是排除该猜想。
可以通过ldd命名来查看可执行文件依赖的动态链接库,例如:
ldd sqlplus
2️⃣ 既然动态库存在,但是仍然报错找不到该动态库,那么是不是查找路径设置错误呢?验证猜想:
1) 查看环境配置变量LD_LIBRARY_PATH
的配置:
echo $LD_LIBRARY_PATH
发现,该动态库所在路径在查找路径中已经配置了,排除该猜想。
该路径既可以在~/.bash_profile中进行配置,也可以在/etc/profile中进行配置
3️⃣ 由现象引起的思考:只要不重启系统,一切运行正常,系统重启就会报错,那么是不是由于系统加载先后顺序的问题?于是网上查找资料,验证,最终发现还真是加载引起的该问题!
redhat的启动方式和执行次序是:
加载内核
执行init程序
/etc/rc.d/rc.sysinit # 由init执行的第一个脚本
/etc/rc.d/rc RUNLEVEL #RUNLEVEL为缺省的运行模式
/etc/rc.d/rc.local #相应级别服务启动之后、在执行该文件(其实也可以把需要执行的命令写到该文件中)
/sbin/mingetty # 等待用户登录
详细可参考《Linux开机启动顺序小结》
问题就是rcS 比/etc/profile先运行,rcS是一开机第一个运行的,这时候你的库还没有被连进来。
/etc/rc.local/etc/rc.sysinit/etc/inittab/etc/profile
因为动态库的路径实在/etc/profile
文件中配置的,所以导致找不到动态,实际上是查找路径未设置的问题。
解决方案
1) init时先使配置文件有效,即:source /etc/profile
2) 修改 /etc/rc.d/rc.local
文件内容:
export ORACLE_HOME=/opt/oracleexport LD_LIBRARY_PATH=...export JAVA_HOME=/usr/local/java/usr/local/tomcat/bin/startup.sh
Over!
- [Problem one]服务自启动导致无法找到动态库文件
- mysql 服务无法启动,错误代码2:无法找到指定文件
- 某个开机自启的服务无法启动导致系统无法启动故障解决
- mysql二进制日志文件出错导致mysql服务无法启动
- 优化大师导致OracleOraHome92TNSListener 服务无法启动
- 优化大师导致OracleOraHome92TNSListener 服务无法启动解决办法!
- 服务器重启导致无法启动MySQL
- Msexchange 复制服务无法启动,导致数据库无法加载!
- Oracle监听器启动路径为空导致服务无法启动
- OracleServiceORCL服务无法找到
- Oracle因删除库数据文件导致服务无法启动的处理方法
- ip地址改变导致OracleDBConsole服务无法启动解决方案(转载)
- SQL Server 2008过期导致MSSQLSERVER服务无法启动
- oranipc11.dll丢失导致 oracle xe OracleXETNSListener 服务无法启动
- SQL Server 2008过期导致MSSQLSERVER服务无法启动
- Oracle 最大连接数设置过大导致服务无法启动
- ipcs 共享内存导致服务器死机、服务无法启动处理
- 服务器端口号占用导致WEB服务无法启动的解决问题
- AlarmManager 记录摘要
- JSP页面加入百度富文本框
- 2018网易校招前端开发工程师笔试卷讨论
- Maven2的配置文件settings.xml
- 工作感悟
- [Problem one]服务自启动导致无法找到动态库文件
- Java NIO技术学习之二
- 在java环境中使用sphinx搜索引擎
- swift 委托的用法
- 牛客网华为在线训练---取近似值
- response.setHeader()的用法
- spring boot admin系统监控处理
- ubuntu caffe安装
- Copy List with Random Pointer问题及解法