Chinaunix首页 | 论坛 | 博客
  • 博客访问: 362746
  • 博文数量: 245
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: -10
  • 用 户 组: 普通用户
  • 注册时间: 2016-08-24 23:21
文章分类

全部博文(245)

文章存档

2017年(2)

2014年(6)

2013年(1)

2011年(15)

2010年(68)

2009年(153)

分类:

2009-09-01 11:34:00

最近写了一个oracle exp自动导出的脚本,单独执行可以正常运行,放在crontab任务中就无法执行拉。

脚本1:setenv.sh

export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/10.2.0
export ORACLE_SID=db
export PATH=$ORACLE_HOME/bin:$PATH
export LANG=zh_CN
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

脚本2:orabak.sh

#!/bin/bash
/opt/oracle/setenv
bakname=`date +%Y%m%d`
cd /opt/oracle
mkdir -p /opt/oracle/orabak/$bakname
/opt/oracle/10.2.0/bin/exp wyg/wyg file=/opt/oracle/orabak/$bakname/$bakname.dmp log=/opt/oracle/orabak/$bakname/$bakname.log
tar -zcvf /opt/oracle/orabak/$bakname/$bakname.dmp.tgz /opt/oracle/orabak/$bakname/$bakname.dmp
rm -rf /opt/oracle/orabak/$bakname/$bakname.dmp

crontab定时任务设置:

46 20 * * * /opt/oracle/orabak.sh

实验后的启示:
1.orabak.sh这个脚本调用了setenv这个环境变量脚本,其实完全可以把setenv脚本中的环境变量写在orabak.sh中,不必多此一举。
2.orabak.sh调用setenv,在crontab中只部分执行,脚本中exp那段没有执行,应该和环境变量有很大的关系。把setenv中的环境变量直接写到orabak.sh脚本中,就没有这个问题。

摘录这个,解释crontab环境变量的问题:

crontab是进行例行性工作常用的命令,比如系统备份,编写一个备份的shell脚本后,使用crontab定时执行这个备份脚本,就可实现自动备份 了。将备份时间设置在三更半夜系统访问量小的时候,既不会影响系统日常使用,也不用派人盯着,第二天看一下邮件,检查一下执行结果就好了。
   这里就不描述如何使用crontab了,这些资料网上一大把,下面将我使用crontab曾经犯过的几个错误和大家分享一下
  1.使用普通变量

    crontab执行shell时只能识别为数不多的系统环境变量,普通变量是无法识别的,如果在编写的脚本中需要使用变量,需要使用export将变量声明为环境变量,脚本才能正常执行。

  2.使用相对路径

   crontab执行shell时,是不会进入到shell脚本所在的路径下执行的,如果shell里含有相对路径的话,会找不到路径的,因此shell脚本中都要使用绝对路径。

  3.权限设置错误

   权限问题永远是linux需要注意的问题,一定要确保crontab的执行者(/etc/crontab文档设置的第二项)有访问shell脚本所在目录并且执行此shell的权限(可使用chomd和chown修改权限和所有者)。

3.crontab生效一定要在2分钟以后,我在做实验的时候图快,每次修改了脚本以后,crontab都在一分钟之内设置,导致crontab根本就不起作用,切记!

4.感觉调用setenv这个方法不对,调用的setenv环境变量似乎是在子shell中执行的,所以当前有关oracle的命令在脚本中就无法正常执行拉。crontab对环境变量的要求还是蛮高的。

5.crontab执行的脚本要写绝对路径,被执行的脚本内一定要配置好环境变量,也要用绝对路径。不是必须,但要结合crontab使用,就必须这样。

6.结论:当没有把握做某个事情的时候,还是依照有把握的方法来做吧!不需要setenv脚本调用,直接把环境变量写在orabak.sh脚本中,确保crontab执行万无一失!
阅读(2748) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~