shell脚本加到crontab里,总会碰到一点这样那样的问题。这次也一样。
把经历的错误都记下来,免得下次再犯
[@more@]手动运行正常的脚本,加到crontab里后发现过了指定时间,还象没运行过一样。
后来想到是环境变量的原因。
1。建议客户在root用户下增加一个小文件refresh,内容:
su - opserdb -c "/erdb/bin/refresh_all"
然后将refresh加入cron中。
客户不采纳
2。那只好在refresh_all中加入环境变量
ORACLE_SID=perdb ; export ORACLE_SID
ORACLE_HOME=/oraclenew/app/oracle/product/9ias_1021; export ORACLE_HOME
ORACLE_BASE=/oraclenew/app/oracle ; export ORACLE_BASE
ORACLE_PATH=${ORACLE_HOME}/rdbms/aps ; export ORACLE_PATH
PATH=${PATH}:$ORACLE_HOME/bin:/usr/ccs/bin ; export PATH
PATH=${PATH}:/usr/openwin/bin ; export PATH
PATH=${PATH}:/oracle/tools/bin ; export PATH
PATH=${PATH}:$II_SYSTEM/ingres/bin:$II_SYSTEM/ingres/utility; export PATH
PATH=${PATH}:/erdb/bin; export PATH
LD_LIBRARY_PATH=${PATH}:$ORACLE_HOME/lib ; export LD_LIBRARY_PATH
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/oracle/tools/lib ; export LD_LIBRARY_PATH
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/openwin/lib ; export LD_LIBRARY_PATH
LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/dt/lib ; export LD_LIBRARY_PATH
export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
TNS_ADMIN=$ORACLE_HOME/network/admin/;export TNS_ADMIN
加入环境变量后发现还是不能运行。
crontab对于失败的cron信息会发送email。
于是查看mail
From opserdb Thu Jan 13 05:30:00 2005
Date: Thu, 13 Jan 2005 05:30:00 GMT
From: Operations ERDB
Message-Id: <200501130530.j0D5U0B24784@gecfsprd11.com>
To: opserdb
Subject: Output from "cron" command
Content-Length: 170
Your "cron" job on gecfsprd11
/erdb/bin/refresh_all
produced the following output:
/erdb/bin/refresh_all: NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1: is not an identifier
这个问题有点奇怪,到现在都没弄明白。尝试将
export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 改成
NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 ; export NLS_LANG
问题是解决了,原因还是没弄明白。因为在操作系统里执行$ export AA='adf'是可以的