当前位置: 技术问答>linux和unix
一进进程在使用crontab中报少了库:libclntsh.so.9.0
来源: 互联网 发布时间:2015-09-15
本文导语: 我开发一个进程 ,进程调用和运行都没有问题,然后我就写了个shell脚本,这个脚本是检测进程是否存在,要是没有存在的话就启动进程,然后我把shell脚本放在crontab里面五分钟检测一次,但进程不存在而要启动时...
我开发一个进程 ,进程调用和运行都没有问题,然后我就写了个shell脚本,这个脚本是检测进程是否存在,要是没有存在的话就启动进程,然后我把shell脚本放在crontab里面五分钟检测一次,但进程不存在而要启动时提示:
error while loading shared libraries:libclntsh.so.9.0:cannot open shared object file:No such file or directory
但直接运行脚本是不会报错的!!
我以前遇到同样的一次,哪次是使用exec()调用的,也有同样的问题,但哪次使用别的使用编译后就没有问题了,不过我现在不知道怎么编译了,我想请教这个问题是怎么引起的,我该怎么解决?
error while loading shared libraries:libclntsh.so.9.0:cannot open shared object file:No such file or directory
但直接运行脚本是不会报错的!!
我以前遇到同样的一次,哪次是使用exec()调用的,也有同样的问题,但哪次使用别的使用编译后就没有问题了,不过我现在不知道怎么编译了,我想请教这个问题是怎么引起的,我该怎么解决?
|
libclntsh.so.9.0 这个库是oracle 9i :OCI客户端运行时库,如果程序使用了oci读写数据库必定会装载这个库,它一般在//product/9.x.x/lib,除非你没有安装oracle客户端的话(在安装时),就会出现找不到这个库这个问题。
如果安装了,那么程序运行时还是要在/etc/ld.so.conf所列路径下、和LD_LIBRARY_PATH所列路径下 去寻找这个库,如果这两个地方都找不到就会报错,说找不到这个库。我估计你的/etc/ld.so.conf下肯定没有包含//product/9.x.x/lib这个路径,但你的用户shell启动脚本(.bash_profile)设置了
LD_LIBRARY_PATH=//product/9.x.x/lib:...这个环境变量,所以你用用户账号运行程序是没问题的。但crontab有自己的用户账号,crontab运行时并不会设置LD_LIBRARY_PATH=//product/9.x.x/lib: 。所以就找不到库了。
解决办法就是:将//product/9.x.x/lib路径加入/etc/ld.so.conf,并运行ldconfig -v(更新动态加载器缓存)就ok了。
如果安装了,那么程序运行时还是要在/etc/ld.so.conf所列路径下、和LD_LIBRARY_PATH所列路径下 去寻找这个库,如果这两个地方都找不到就会报错,说找不到这个库。我估计你的/etc/ld.so.conf下肯定没有包含//product/9.x.x/lib这个路径,但你的用户shell启动脚本(.bash_profile)设置了
LD_LIBRARY_PATH=//product/9.x.x/lib:...这个环境变量,所以你用用户账号运行程序是没问题的。但crontab有自己的用户账号,crontab运行时并不会设置LD_LIBRARY_PATH=//product/9.x.x/lib: 。所以就找不到库了。
解决办法就是:将//product/9.x.x/lib路径加入/etc/ld.so.conf,并运行ldconfig -v(更新动态加载器缓存)就ok了。
|
没错啊,你不是已经解决了吗?
|
顶一下,看看先……
|
是不是crontab有问题?你随便搞一个脚本,看看是否能正确执行?
|
把你的crontab文件里面的启动条目贴出来看看先……
|
设置LD_LIBARAY_PATH
|
FreeBSD下面的crontab里面多了一个参数,用来控制启动的用户的,可惜这里没有,真得无语了……
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。