尝试了在文件中source profile、. /root/.bashrc、写绝对路径等方法都不能执行sqlplus命令,最终找到两种解决办法
解决办法1:
1.在sh文件开头写入oracle环境变量
#!/bin/bash
PATH=$PATH:$HOME/.local/bin:$HOME/binexport PATH
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl
export ORACLE_TERM=xterm
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export LANG=C
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBKecho "aaa" > /tmp/a.txt
sqlplus 数据库账号/数据库密码 <<EOF
create table test0424 as select a.*,sysdate from table0424 a;
!echo "bbb" > /tmp/b.txt
EOF
2.查找sh命令绝对路径
[oracle@oradb ~]$ which sh
/bin/sh
3.定时任务
[oracle@oradb ~]$ crontab -e
5 9 * * * /bin/sh /home/oracle/test1.sh
解决办法2:
在定时任务中source环境变量文件
[oracle@oradb ~]$ crontab -e
8 8 * * * source /home/oracle/.bash_profile && /bin/sh -x /home/oracle/test1.sh