当前位置: 首页 > Linux

linux下oracle用户crontab无效的解决方法

时间:2023-04-06 05:25:52 Linux

老服务器上DB之前有一个shell,放在root用户下,每周二执行oracle的自动全库备份。现在DB已经迁移并切换到新的服务器,我想使用oracle用户来完成这个操作。结果一开始测试就失败了,自动任务写完后无法自动执行。尝试手动执行shell[oracle@oradb2~]$/ora_bak/dbbak/oracle_backup.sh发现可以手动执行:setautomatictask3011**3/ora_bak/dbbak/oracle_backup.sh因为昨天正好是星期三,所以自动任务测试的定义是:每周三11:30,报错的时候,11:30:01,cron开始执行,但是失败了。从日志中可以看到如下信息:问题分析从报错来看,linux报错找不到expdp命令,但是我们还是可以手动执行。这是不是说明shell里面写的有问题?让我们看看这个shell:#!/bin/shrq=`date+"%Y%m%d"`expdpxxxxx/xxxxxdirectory=DUMP_DIRdumpfile=xxx_bak$rq.dmplogfile=xxx_bak$rq.logschemas=xxxx可以看到,简单的命令只有两条,为什么不能自动执行呢?扩容联想旧的DB服务器,用root账号运行,在新服务器上用oracle账号运行。这是一个比较明显的区别。应该是这里有问题。再仔细想想,可能跟不同用户的环境变量有关。正是由于环境变量的关系,oracle用户在执行cron时找不到expdp命令,那么为什么oracle找不到呢?答案是:shell中没有指定环境变量。为了解决这个问题,让我们修改shell:#!/bin/sh。/etc/配置文件。~/.bash_profilerq=`date+"%Y%m%d"`expdpxxxx/xxxxdirectory=DUMP_DIRdumpfile=xxx_bak$rq。dmplogfile=xxx_bak$rq.logschemas=xxx这次没有报错,cron准时执行。