我在一个shell脚本中设定有如下代码。
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: cannot set date: Operation not permitted谁能解释一下,为什么会有这个错?虽然报该错不会影响脚本运行。
请问如何实现上述代码的同样功能,但又不报这个错呢?

解决方案 »

  1.   

    LINUX吧?date    -s, --set=STRING
       set time described by STRINGORACLE用户无权限设置主机时间。你取变量的方式,换下。
      

  2.   

    使用root用户执行脚本,执行时间设置,
    如果需要以oracle用户处理,使用su - oracle 即可
      

  3.   

    脚本中间调用date的原因是截取当前时间,不是设定当前时间。脚本每天运行的时候,中间拷贝的源文件名都不一样的。
    比如今天是2010年4月21日,要拷贝的就是昨天的备份文件,即20100421.dmp.gz。
    如果只截取,不设定,这样应该就不会报这个错了。
      

  4.   

    我已经自己调试成功了,把第一句里面修改了下,就OK了。
    把bakname=`date -s "-1 days" +%Y%m%d`
    修改成
    bakname=`date -d yesterday +%Y%m%d`修改后的全部代码如下:
    bakname=`date -d yesterday +%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