关于crontab使用中报找不到库


我开发一个进程 ,进程调用和运行都没有问题,然后我就写了个shell脚本,
这个脚本是检测进程是否存在,要是没有存在的话就启动进程,然后我把shell脚本放在crontab里面五分钟检测一次,
但进程不存在而要启动时提示:

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读写数据库必定会装载这个库,
它一般在/<oracle安装路径>/product/9.x.x/lib,除非你没有安装oracle客户端的话(在安装时),
就会出现找不到这个库这个问题。
如果安装了,那么程序运行时还是要在/etc/ld.so.conf所列路径下、和LD_LIBRARY_PATH所列路径下
去寻找这个库,如果这两个地方都找不到就会报错,说找不到这个库。我估计你的/etc/ld.so.conf下
肯定没有包含/<oracle安装路径>/product/9.x.x/lib这个路径,但你的用户shell启动脚本(.bash_profile)设置了
LD_LIBRARY_PATH=/<oracle安装路径>/product/9.x.x/lib:...这个环境变量,所以你用用户账号运行程序是没问题的。
但crontab有自己的用户账号,crontab运行时并不会设置LD_LIBRARY_PATH=/<oracle安装路径>/product/9.x.x/lib: 。
所以就找不到库了。
解决办法就是:将/<oracle安装路径>/product/9.x.x/lib路径加入/etc/ld.so.conf,
并运行ldconfig -v(更新动态加载器缓存)就ok了。

/

把你的crontab文件里面的启动条目贴出来看看先
/

*/5 * * * * /home/oracle/process_up

/

设置LD_LIBARAY_PATH

/

谢谢你!我了解的情况基本是:
1,
可以使用
*/5 * * * * su - oracle -c ....sh
来每5分钟执行一次,这样可以逼开ORACLE_HOME必须设置的问题,
2,
在shell脚本里必须使用
ORACLE_HOME = .....
export ORACLE_HOME
这样来设置crontab执行的shell的环境

-------------------------

注:在使用crontab调度时,程序可能会报找不到动态库,但直接执行程序则没有问题。

这个问题一般是由于crontab的执行用户是root,而root的环境变量中没有设置指明程序需要的动态库路径。

如果调度的程序是shell脚本,可以将执行程序的用户的环境变量复制一份到shell脚本的开头,即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值