操作系统Red Hat Enterprise Linux Server release 5 (Tikanga)
数据库oracle10g我在oracle用户下写了个脚本,abc.sh在oracle下运行这个脚本./abc.sh,没有问题。但是我在oracle用户下用crontab -e命令设定该脚本自动运行,却有问题。脚本还是允许的,查看/var/mail/文件夹下面的oracle文件,查看到脚本还是定时运行了的,但是说脚本中的sqlplus命令和imp命令找不到。这应该是属于运行脚本的用户身份不对,运行脚本的身份可能是root身份。请问如何解决该问题?
听人说,不能再shell脚本用切换用户的。而且我的脚本是在oracle用户身份下编写的。下面是/var/mail/文件夹下oracle文件中的部分内容From [email protected]  Wed Apr 14 03:59:06 2010
Return-Path: <[email protected]>
Received: from localhost.localdomain (localhost.localdomain [127.0.0.1])
        by localhost.localdomain (8.13.8/8.13.8) with ESMTP id o3DJx5Gr006550
        for <[email protected]>; Wed, 14 Apr 2010 03:59:05 +0800
Received: (from oracle@localhost)
        by localhost.localdomain (8.13.8/8.13.8/Submit) id o3DJx1ic006542;
        Wed, 14 Apr 2010 03:59:01 +0800
Date: Wed, 14 Apr 2010 03:59:01 +0800
Message-Id: <[email protected]>
From: [email protected] (Cron Daemon)
To: [email protected]
Subject: Cron <oracle@localhost> /home/oracle/abc.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: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=oracle>
X-Cron-Env: <USER=oracle>/home/oracle/datain.sh: line 3: sqlplus: command not found
date: cannot set date: Operation not permitted
/home/oracle/datain.sh: line 236: imp: command not found

解决方案 »

  1.   

    crontab环境变量问题,与ORACLE数据库相关的环境变量,需要一一在脚本里设置,因为crontab不认识这些变量。
      

  2.   

    date: cannot set date: Operation not permitted另外,oracle无权修改系统时间。
      

  3.   

    Program    --- Call .SH
    Job        --- Call Program
    Scheduler  --- Run it when needed
      

  4.   

    我是在脚本中有如下代码
    bakname=`date -s "-1 days" +%Y%m%d`rm -f /home/oracle/newdata.dmp.gzrm -f /home/oracle/newdata.dmpcp /home/oracle/bakdata/${bakname}.dmp.gz /home/oracle/newdata.dmp.gzgunzip /home/oracle/newdata.dmp.gz就是上述命令中应用到了date,这些语句怎么会报这个错呢?
    date: cannot set date: Operation not permitted谁能解释一下,为什么会有这个错?
    如果要实现上述代码的同样功能,但又不报这个错,该如何写呢?
      

  5.   

    另说明下,我在脚本开头加上出修改了下#!/bin/bash. $HOME/.bash_profile也就是导入oracle用户的环境变量,就解决了问题,谢谢suiziguo的建议。