Chinaunix

标题: crontab疑惑 [打印本页]

作者: ggoodstudy    时间: 2011-11-04 15:53
标题: crontab疑惑
用oracle用户(crontab -e)做了一个定时任务:

[oracle@localhost dp]$ crontab -l
49 15 * * * /dbbackup/dp/test.sh

[oracle@localhost dp]$ cat test.sh
touch /dbbackup/dp/aa
echo mengxing>aa

我单独执行./test.sh可以生成aa文件且把第二行的数据写入到了aa文件中,可是我把这个shell作为定时任务来执行的时候只生成了aa文件,没有把第二行的内容写入到第一行创建的aa文件中,就好像这个定时任务只执行了脚本中第一行的内容,请大家解释一下,如果要两行脚本内容都执行该怎么写呢?谢谢!
作者: taojie2000    时间: 2011-11-04 16:00
回复 1# ggoodstudy


    echo   ..   

aa的路径写全
作者: ggoodstudy    时间: 2011-11-04 16:11
回复 2# taojie2000


恩 路径写全就可以了!还有另外一个疑问
[oracle@localhost dp]$ ll
总计 8
-rwxrwxrwx 1 oracle oinstall 159 11-04 14:27 dp.sh
-rwxr-xr-x 1 oracle oinstall  52 11-04 16:02 test.sh

[oracle@localhost dp]$ cat test.sh
touch /dbbackup/dp/aa
echo mengxing>/dbbackup/dp/aa

[oracle@localhost dp]$ cat dp.sh
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
expdp scott/tiger schemas=infocollect dumpfile=infocollect.dmp logfile=infocollect.log directory=dpdata

为啥我用如下的定时任务执行dp.sh就不行呢(单独执行./dp.sh是没有问题的)???指定时间到了后什么反应都没有,我看也不是权限的问题啊,高手指定一下,谢谢!
[oracle@localhost dp]$ crontab -l
06 16 * * * /dbbackup/dp/dp.sh
作者: taojie2000    时间: 2011-11-04 16:13
回复 3# ggoodstudy


    那脚本里的 命令写全路径
作者: ggoodstudy    时间: 2011-11-04 16:47
回复 4# taojie2000


这个directory=dpdata路径是在数据库里面创建的!

create directory dpdata as '/dbbackup/dp';
grant read,write on directory dpdata to public;
作者: taojie2000    时间: 2011-11-04 16:54
回复 5# ggoodstudy


    expdp 命令
作者: ggoodstudy    时间: 2011-11-04 16:59
回复 6# taojie2000


    是的 知道问题出在哪么?这个脚本单独执行是没问题的,为啥一放到crontab中就什么反应都没有呢!!~~
作者: taojie2000    时间: 2011-11-04 17:08
回复 7# ggoodstudy


    crontab  不直接引用环境变量  需要在里面自己额外定义   或 命令就写全路径
作者: chenyx    时间: 2011-11-04 17:43
crontab调用的命令需要全路径调用.
作者: aljunied    时间: 2011-11-04 19:40
本帖最后由 aljunied 于 2011-11-04 19:41 编辑

放着几行在你的dp.sh里

  1. ORACLE_HOME=/path/to/oracle/home
  2. LIBRARY_PATH=$ORACLE_HOME/lib:$LIBRARY_PATH
  3. PATH=$ORACLE_HOME/bin:$PATH
  4. export ORACLE_HOME LIBRARY_PATH PATH
复制代码
另外脚本的第一行最好指明使用什么shell

  1. #!/bin/bash
复制代码

作者: chenyx    时间: 2011-11-04 20:22
同意楼上的,写脚本要养成习惯,在脚本的第一行写上要是用的shell
作者: harrison_han    时间: 2011-11-05 13:18
同意11楼,expdp放到crontab中时需要将ORACLE_HOE, ORACLE_SID写到脚本中,同时expdp命令要用全路径方式写,即/u01/......./expdp
作者: 9ding    时间: 2011-11-06 21:52
同意11楼,建议下次遇到问题,多看看/var/log/cron 分析下执行结果是否报错。
另外也可以分析下系统提示邮件/var/spool/mail/root
作者: ggoodstudy    时间: 2011-11-07 09:14
谢谢楼上各位的指点!
我用如下的方式怎么还是不行呢?我的环境变量与.bash_profile中一致了,望帮忙看看,谢谢!
oracle@localhost dp]$ ll
-rwxrwxrwx 1 oracle oinstall 365 11-07 09:08 dp.sh
-rwxr-xr-x 1 oracle oinstall  52 11-04 16:02 test.sh

[oracle@localhost dp]$
[oracle@localhost dp]$ crontab -l
10 9 * * * /dbbackup/dp/dp.sh

[oracle@localhost dp]$ cat dp.sh
#!/bin/bash
ORACLE_BASE=/app/db/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME
export PATH=$ORACLE_HOME/binPATH
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
/app/db/oracle/product/11.2.0/dbhome_1/bin/expdp infocollect/infocollect  schemas=infocollect dumpfile=infocollect.dmp logfile=infocollect.log directory=dpdata


[oracle@localhost dp]$ cat /home/oracle/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

ORACLE_BASE=/app/db/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1; export ORACLE_HOME
export PATH=$ORACLE_HOME/binPATH
export ORACLE_SID=orcl
alias sqlp='sqlplus / as sysdba'
作者: ggoodstudy    时间: 2011-11-07 09:30
补充点日志/var/spool/mail/oracle的内容,是不是环境变量没生效??
Export: Release 11.2.0.2.0 - Production on Mon Nov 7 09:20:01 2011

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

UDE-12162: operation generated ORACLE error 12162
ORA-12162: TNS:net service name is incorrectly specified

From oracle@localhost.localdomain  Mon Nov  7 09:26:01 2011
Return-Path: <oracle@localhost.localdomain>
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
        by localhost.localdomain (8.13.8/8.13. with ESMTP id pA71Q1N5027172
        for <oracle@localhost.localdomain>; Mon, 7 Nov 2011 09:26:01 +0800
Received: (from oracle@localhost)
        by localhost.localdomain (8.13.8/8.13.8/Submit) id pA71Q1g4027171;
        Mon, 7 Nov 2011 09:26:01 +0800
Date: Mon, 7 Nov 2011 09:26:01 +0800
Message-Id: <201111070126.pA71Q1g4027171@localhost.localdomain>
From: root@localhost.localdomain (Cron Daemon)
To: oracle@localhost.localdomain
Subject: Cron <oracle@localhost> /dbbackup/dp/dp.sh
Content-Type: text/plain; charset=UTF-8
Auto-Submitted: auto-generated
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/oracle>
X-Cron-Env: <ATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=oracle>
X-Cron-Env: <USER=oracle>
作者: hsrenqing    时间: 2011-11-07 10:32
你的脚里还是有不对的地方,呵呵,建议加上在第二行加上 set -xv 自己调试下看看哦
作者: cjl_2029    时间: 2011-11-07 10:54
{:2_167:}好贴
作者: ggoodstudy    时间: 2011-11-07 12:03
回复 16# hsrenqing


   哪里不对啊?? 之前做计划的时候都挺顺利的~~
作者: hsrenqing    时间: 2011-11-07 13:48
第二行加上set -xv执行下看看结果,贴上图哦
如果手工执行正常,你切换到根目录用绝对路径执行一下看看
作者: hsrenqing    时间: 2011-11-07 13:52
还有,你把你要用的可执行文件都做成变量声明出来,这样,基本上手动能做的工作都可以用脚本来做了
作者: yyf1986    时间: 2011-11-09 10:29
用su - oracle 吧




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2