问题描述:
写了一个exp的脚本,放到了oracle的crontab中,但一直不能执行。
问题原因
crond默认不会加载该用户的.profile和.bashrc文件,它的执行环境只能有一些最基本的环境变量,因此exp的命令因找不到而不执行。
验证过程
写了一个脚本,赋予777权限
[root@DBBANK ~]# cat /tmp/wjf/env
env |wall
分别把这个脚本加入到root和oracle两个用户的定时任务中
[root@DBBANK ~]# whoami
root
[root@DBBANK ~]# crontab -l
01 * * * * /tmp/wjf/env
[root@DBBANK ~]#
[oracle@DBBANK ~]$ whoami
oracle
[oracle@DBBANK ~]$ crontab -l
02 * * * * /tmp/wjf/env
[oracle@DBBANK ~]$
时间到,执行结果为
Broadcast message from root@DBBANK (Fri May 8 17:36:02 2015):
SHELL=/bin/sh
USER=root
PATH=/usr/bin:/bin
_=/usr/bin/env
PWD=/root
HOME=/root
SHLVL=2
LOGNAME=root
[oracle@DBBANK ~]$
Broadcast message from oracle@DBBANK (Fri May 8 17:38:01 2015):
SHELL=/bin/sh
USER=oracle
PATH=/usr/bin:/bin
_=/usr/bin/env
PWD=/home/oracle
HOME=/home/oracle
SHLVL=2
LOGNAME=oracle
可以看出crond打开的shell环境。只有一些最基本的环境变量,所以,你不要想着把oracle下的命令写成脚本放在oracle的定时任务就万事大吉了。实际它是不行的。
解决办法
在脚本里手动export环境变量。
或者
在脚本最前面source 环境变量文件
或者
. (空格) 环境变量文件