关于linux环境下crontab命令环境变量的问题

时间:2023-03-09 15:22:31
关于linux环境下crontab命令环境变量的问题

这几天在弄数据库备份的事情,其中涉及到使用crontab命令自动执行shell脚本的问题,发现将写好的数据库导出脚本export.sh

  ###############################################################################
extfile=`date +"%m_%d_%H_%M"`
###############################################################################
exp aa/aa file=/home/oracle/expfile/aafulltmp_$extfile.dmp constraints=y owner=aa log=n
exp bb/bb file=/home/oracle/expfile/bbfulltmp_$extfile.dmp constraints=y owner=bb log=n

加入到crontab中会执行失败

crontab内容如下

[dbserver@db20 ~]$ crontab -l
32 2 * * * /home/dbserver/exportdb.sh

根据crontab执行后会给用户发送一封邮件中的提示显示

/home/dbserver/export.sh: line 4: exp: command not found
/home/dbserver/export.sh: line 5: exp: command not found

看起来不是crontab的问题,而是没有找到exp命令,说明是环境变量的问题,crontab执行时环境变量与直接执行是不一样的,去网上找到了解决办法如下

在shell脚本前面加入

#!/bin/bash
source /home/dbserver/.bash_profile

最终的shell文件内容为

 ###############################################################################
extfile=`date +"%m_%d_%H_%M"`
###############################################################################
#!/bin/bash
source /home/dbserver/.bash_profile
exp aa/aa file=/home/oracle/expfile/aafulltmp_$extfile.dmp constraints=y owner=aa log=n
exp bb/bb file=/home/oracle/expfile/bbfulltmp_$extfile.dmp constraints=y owner=bb log=n

至此成功执行,还有一种方法是将exp命令写成绝对路径

完结!