首页 > 代码库 > Linux 定时执行shell脚本_crontab

Linux 定时执行shell脚本_crontab

1、查看任务[oracle@XXXXX OracleBackA]$ crontab -l

2、新增任务[oracle@XXXXX 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用户

Linux 定时执行shell脚本_crontab