Linux的计划任务(crontab)环境变量问题解决

文章讲述了作者在Python服务中使用CronTab定时调用Oracle时遇到环境变量问题,通过排查发现是由于LD_LIBRARY_PATH缺失导致。解决方法是在CronTab任务中添加exportLD_LIBRARY_PATH设置,确保Oracle客户端库的正确加载。
摘要由CSDN通过智能技术生成

1、背景
新上了个python服务,里面有调用oracle,其中有个需求需要定时去调用,贪方便想用crontab,出现了环境变量问题,于是跟他杠上了,势必要解决它!

2、现象
在这里插入图片描述
尽管我在计划任务里写全了脚本路径,甚至让它重新加载环境变量,不管是source /etc/profile
还是source /home/xxx/.bashrc 还是把所有的执行命令都写了绝对路径,都会报错,报错如下:

Traceback (most recent call last):
  File "manager.py", line 20, in <module>
    cx_Oracle.init_oracle_client(lib_dir=path_to_oracle_client_lib)
cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library: "/home/xxxx/project/install/instantclient_11_2/libclntsh.so: cannot open shared object file: No such file or directory". See https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html for help
根据提示,我去指定路径找,确实没有这个文件,官网也下载了很多个版本,确实没有;提示缺依赖包,但是这台机器还有别的服务,不想更新了linux的lib,这个可能会引发很多问题;

最重要的是,同样的命令我直接运行不会报错,一放到crontab就会报这个环境变量问题;
于是我尝试,查询到调用oracle client的时候,有加载这个变量:LD_LIBRARY_PATH
尝试在终端输出这个环境变量的值:

echo $LD_LIBRARY_PATH

原来系统里有这个文件,我指定的目录缺少了这个文件“libclntsh.so”,然而使用source /home/xxx/.bashrc 并不会生效,于是我在计划任务里直接重设这个变量,这时再测试就正常了;

3、具体操作

echo $LD_LIBRARY_PATH

在这里插入图片描述
将输出的值复制,加到计划任务里

crontab -e
45 17 * * 1-5 cd /home/xxxx/project/DailyxxxxAuto/ && source /home/xxxx/.bashrc && export LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/client_1 && /usr/local/python36/bin/python3 manager.py &> output.log &

主要是加入这个
export LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/client_1

4、总结
具体解决办法还是要结合自己生产实际,做每个操作前都需三思而后行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搞运维的万精油

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值