一进进程在使用crontab中报少了库:libclntsh.so.9.0

Dong 2005-03-18 11:42:53
我开发一个进程 ,进程调用和运行都没有问题,然后我就写了个shell脚本,这个脚本是检测进程是否存在,要是没有存在的话就启动进程,然后我把shell脚本放在crontab里面五分钟检测一次,但进程不存在而要启动时提示:
error while loading shared libraries:libclntsh.so.9.0:cannot open shared object file:No such file or directory

但直接运行脚本是不会报错的!!


我以前遇到同样的一次,哪次是使用exec()调用的,也有同样的问题,但哪次使用别的使用编译后就没有问题了,不过我现在不知道怎么编译了,我想请教这个问题是怎么引起的,我该怎么解决?
...全文
860 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dong 2005-03-20
  • 打赏
  • 举报
回复
Ropyn(剑心) :
我使用pro*c连接的

ckc(火) :
我只是找了很多资料得到的经过而已,而还没有测试过,因为没有环境,所以总不确定是否正确的,有劳你们了!揭贴
ckc 2005-03-20
  • 打赏
  • 举报
回复
没错啊,你不是已经解决了吗?
Dong 2005-03-19
  • 打赏
  • 举报
回复
Ropyn(剑心):
谢谢你!我了解的情况基本是:
1,
可以使用
*/5 * * * * su - oracle -c ....sh
来每5分钟执行一次,这样可以逼开ORACLE_HOME必须设置的问题,

2,
在shell脚本里必须使用
ORACLE_HOME = .....
export ORACLE_HOME
这样来设置crontab执行的shell的环境
Dong 2005-03-19
  • 打赏
  • 举报
回复
Ropyn(剑心):
谢谢你!我连接的情况基本是:
1,
可以使用
*/5 * * * * su - oracle -c ....sh
来每5分钟执行一次,这样可以逼开ORACLE_HOME必须实在的问题,

2,
在shell脚本里必须使用
ORACLE_HOME = .....
export ORACLE_HOME
这样来设置crontab执行的shell的环境

大侠大概是这样的吗?
DanXer 2005-03-19
  • 打赏
  • 举报
回复
能否访问oracle是由程序内部用oracle的某个用户帐号来访问的,应该和运行程序的用户没有关系,何况crontab好像是由root用户运行的。访问的问题是否还是跟程序运行的环境有关系,比如安装oracle的用户会有一组shell变量,比如ORACLE_HOME等。你的程序是使用什么方式连接oracle数据库的?
Dong 2005-03-19
  • 打赏
  • 举报
回复
哪位可以帮我吗?
DanXer 2005-03-18
  • 打赏
  • 举报
回复
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了。
nodummy 2005-03-18
  • 打赏
  • 举报
回复
FreeBSD下面的crontab里面多了一个参数,用来控制启动的用户的,可惜这里没有,真得无语了……
Dong 2005-03-18
  • 打赏
  • 举报
回复
把你的crontab文件里面的启动条目贴出来看看先……
---------------------------------------------
*/5 * * * * /home/oracle/process_up
sharkhuang 2005-03-18
  • 打赏
  • 举报
回复
设置LD_LIBARAY_PATH
Dong 2005-03-18
  • 打赏
  • 举报
回复
我在出差过程中,而我的脚本是在银行里写的,所以现在是不能够看到的!不过我有一点在废人的帮助下觉得有可以的错误是,我的脚本是使用root写的!root是不是不可以操作数据库呢??
nodummy 2005-03-18
  • 打赏
  • 举报
回复
把你的crontab文件里面的启动条目贴出来看看先……
playmud 2005-03-18
  • 打赏
  • 举报
回复
是不是crontab有问题?你随便搞一个脚本,看看是否能正确执行?
SammyLan 2005-03-18
  • 打赏
  • 举报
回复
有耐心等的话
明年今天可能会回答了
nodummy 2005-03-18
  • 打赏
  • 举报
回复
顶一下,看看先……
Dong 2005-03-18
  • 打赏
  • 举报
回复
感谢Ropyn(剑心) :
按你的方式我通过了libclntsh.so.9.0 这个报错。不过存在另一个错误,我使用crontab启动的进程总是访问不了oracle数据库,按你所说的,crontab是使用别的用户工作的,那么是否存在这个用户没有访问数据库的权限的可能?我该怎样在crontab的任务里使用oracle的安装通用户用户是启动进程??
谢谢大家!
tengulre 2005-03-18
  • 打赏
  • 举报
回复
up

23,216

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧