Chinaunix

标题: AIX 下crontab任务执行错误? [打印本页]

作者: anderlee    时间: 2012-08-30 16:28
标题: AIX 下crontab任务执行错误?
OS:AIX5.3
oracle 用户下一sh脚本,单独执行此脚本可以成功执。
但是放到crontab 下执行,从/var/adm/cron/log下看
到大部是以下错误,请问大侠什么原因?

# tail -10 log
oracle    : CMD (  /u05/home/erp/load_data.sh ) : PID ( 974988 ) : Thu Aug 30 15:56:00 2012
Cron Job with pid: 974988 Failed
oracle    : CMD (  /u05/home/erp/load_data.sh ) : PID ( 790690 ) : Thu Aug 30 16:00:00 2012
Cron Job with pid: 790690 Failed
oracle    : CMD (  /u05/home/erp/load_data.sh ) : PID ( 9371858 ) : Thu Aug 30 16:05:00 2012
Cron Job with pid: 9371858 Failed
oracle    : CMD (  /u05/home/erp/load_data.sh ) : PID ( 9474166 ) : Thu Aug 30 16:10:00 2012
Cron Job with pid: 9474166 Successful
oracle    : CMD (  /u05/home/erp/load_data.sh ) : PID ( 9412828 ) : Thu Aug 30 16:15:00 2012
Cron Job with pid: 9412828 Failed

作者: anderlee    时间: 2012-08-30 20:01
把问题描述清楚一点。

操作系统为:AIX5.3, oracle 用户下一脚本单独手工执行没有问题,如果放到crontab里则执行不成功,请大侠指点一下问题在哪里?谢谢。

以用步骤在oracle用户下完成。
1.
shell脚本内容:
$ cat load_data.sh
#!/bin/ksh
ls -l /u05/home/erp/ftp/in |grep csv$ |awk '{print $NF}' >/u05/home/erp/ftp/in/csv.list
while read file_name
do
sqlplus -s erpapp/erpapp@ERPDB <<EOF
exec load_data('$file_name');
quit
EOF
done < /u05/home/erp/ftp/in/csv.list
$

2.
命令行下手工执行,执行成功。
$ sh /u05/home/erp/ftp/in/load_data.sh

PL/SQL procedure successfully completed.


3.
放到crontab里执行,则报如下错误,观察结果发现调用sqlplus出错
$ crontab -l
* * * * *  /u05/home/erp/ftp/in/load_data.sh


# tail -10 /var/adm/cron/log
oracle    : CMD (  /u05/home/erp/ftp/in/load_data.sh ) : PID ( 9662506 ) : Thu Aug 30 17:14:00 2012
Cron Job with pid: 9662506 Failed
oracle    : CMD (  /u05/home/erp/ftp/in/load_data.sh ) : PID ( 9527432 ) : Thu Aug 30 17:15:00 2012
Cron Job with pid: 9527432 Failed
oracle    : CMD (  /u05/home/erp/ftp/in/load_data.sh ) : PID ( 9441422 ) : Thu Aug 30 17:16:00 2012
Cron Job with pid: 9441422 Failed
oracle    : CMD (  /u05/home/erp/ftp/in/load_data.sh ) : PID ( 9392258 ) : Thu Aug 30 17:17:00 2012
Cron Job with pid: 9392258 Failed
oracle    : CMD (  /u05/home/erp/ftp/in/load_data.sh ) : PID ( 9633942 ) : Thu Aug 30 17:18:00 2012
Cron Job with pid: 9633942 Failed

作者: phanx    时间: 2012-08-30 21:54
shell中需要export 所需的环境变量,如 PATH ORACLE_HOME ORACLE_SID 等。
作者: anderlee    时间: 2012-08-30 23:01
应该是这个原因,不过通过变通的办法也解决了。

想知道一下,同是在oracle用户,手工执行可以读取到这些变量PATH ORACLE_HOME ORACLE_SID 等,为什么到crontab 下就不行了呢?
作者: anderlee    时间: 2012-08-30 23:01
回复 3# phanx

应该是这个原因,不过通过变通的办法也解决了。

想知道一下,同是在oracle用户,手工执行可以读取到这些变量PATH ORACLE_HOME ORACLE_SID 等,为什么到crontab 下就不行了呢?

   
作者: dba_dream    时间: 2012-08-31 08:42
crontab 使用的是系统的环境变量。可以修改environment里的环境变量,也可以将用户的profile写进crontab脚本。
作者: anderlee    时间: 2012-08-31 20:49

问题描述:crontab中启动的shell脚本不能正常运行,但是使用手动执行没有问题,在$home/.profile中设定了脚本所需要的环境变量。

解答:cron命令的默认shell是/usr/bin/bsh,如果要在cron启动的脚本中使用ksh,就必须在脚本中的第一行添加“!/usr/bin/ksh”的声明。

如果cron进程启动的shell脚本设置了用户登录时的环境变量,就必须在cron启动的shell脚本中添加下面的内容,才能够在启动的脚本中使用
$home/.profile文件中的环境变量。

. $home/.profile

这是因为cron进程执行的shell脚本是不会自动加载用户目录下的.profile文件,所以需要脚本自己加载所需要的环境变量。




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