1、查看任务[[email protected] OracleBackA]$ crontab -l
2、新增任务[[email protected] OracleBackA]$ crontab -e
3、每天14点40执行/backup/OracleBackA/sh.sh 脚本,日志输出到 /backup/OracleBackA/shlog.txt
40 14 * * * /backup/OracleBackA/sh.sh &>> /backup/OracleBackA/shlog.txt
问题
1、/bin/sh: /backup/OracleBackA/sh.sh: Permission denied
shell脚本没有执行权限,chmod 755 sh.sh
2、/backup/OracleBackA/sh.sh: line 59: ctxlc: command not found
/backup/OracleBackA/sh.sh: line 67: sqlplus: command not found
/backup/OracleBackA/sh.sh: line 69: ctxlc: command not found
/backup/OracleBackA/sh.sh: line 71: [: : integer expression expected
/backup/OracleBackA/sh.sh: line 106: sqlplus: command not found
/backup/OracleBackA/sh.sh: line 108: [: : integer expression expected
/backup/OracleBackA/sh.sh: line 136: [: : integer expression expected
/backup/OracleBackA/sh.sh: line 136: [: : integer expression expected
你可能已经注意到上面的例子中,每个命令都给出了绝对路径。当使用c r o n t a b运行s h e l l
脚本时,要由用户来给出脚本的绝对路径,设置相应的环境变量。记住,既然是用户向c r o n
提交了这些作业,就要向c r o n提供所需的全部环境。不要假定c r o n知道所需要的特殊环境,它
其实并不知道。所以你要保证在s h e l l脚本中提供所有必要的路径和环境变量,除了一些自动
设置的全局变量。
有两个方法,在shell里export或者复制到/etc/profile里面
第一种解决办法:
查看运行c r o n t a b任务的用户的环境变量:.bash_profile文件 vi /home/oracle/.bash_profile
将export PATH ORACLE_BASE ORACLE_HOME ORACLE_SID 这些路径都复制到shell脚本中,放在shell脚本开头
shell脚本中:
export ORACLE_BASE=/u01/oracle
export ORACLE_HOME=/u01/oracle/app/12.1.0
第二种解决办法:
将.bash_profile文件中的设置都复制到/etc/profile 文件中,不过要用root用户