ITPub博客

首页 > 应用开发 > IT综合 > shell加到crontab里的问题(二)

shell加到crontab里的问题(二)

原创 IT综合 作者:zhyuh 时间:2005-01-18 15:52:58 0 删除 编辑

这个问题有点特殊,花了我近一个礼拜的时间才解决。

简言之,就是加入到crontab中的shell脚本,执行时前面会自动加上sh命令。这样对于用bash, csh等shell写的脚本,如果使用了默认的sh不支持的特殊功能,则将其加入crontab中时,调用的脚本前要强制加上/usr/bin/bash等指定所用shell的语句。

[@more@]

问题:

有三个shell脚本,refresh_all, refresh_schema, refresh_table,其中refresh_all调用refresh_schema,refresh_schema调用refresh_table。

手动执行$refresh_all时,程序能正常执行,且结果正确。将其加入crontab:

33 06 * * 1,2,3,4,5 /erdb/bin/refresh_all

执行中发现调用refresh_table时出错。

查看mail,错误内容如下:

$mail

From opserdb Fri Jan 14 06:47:27 2005
Date: Fri, 14 Jan 2005 06:47:27 GMT
From: Operations ERDB
Message-Id: <200501140647.j0E6lRp15696@gecfsprd11.com>
To: opserdb
Subject: Output from "cron" command
Content-Length: 264

Your "cron" job on gecfsprd11
/erdb/bin/refresh_all>/erdb/log/refresh_all_cron.log

produced the following output:

/erdb/bin/refresh_table: test: argument expected
/erdb/bin/refresh_table: test: argument expected
/erdb/bin/refresh_table: test: argument expected

shell脚本中的相关内容

$cat refresh_all
#!/usr/bin/bash
ORACLE_SID=perdb ; export ORACLE_SID
.....
/erdb/bin/refresh_schema EDENFR edenfr_2004 EWRFRMASTER ewrfrmaster

$cat refresh_schema
..
elif [ $OBJECT_TYPE = "T" ]; then
SQL_FILE=${OBJECT_NAME}_fr.sql
/erdb/bin/refresh_table $SQL_FILE $SCHEMA $SCHEMA_PASS
..

解决过程:

将问题反映到多个地方,都没有得到解决方法或者解决思路。

自己在测试中发现如果运行 $refresh_table eden_flat_ord_cmpt_fr.sql edenfr edenfr_2004 则可以运行,且结果正确。

如果运行 $sh refresh_table eden_flat_ord_cmpt_fr.sql edenfr edenfr_2004 则出现同crontab一样的错误:

refresh_table: test: argument expected

再问人家的时候,才知道refresh_table里使用了sh不支持的功能。

确实如此,refresh_table里适用了语句

TABLE_NAME=`echo ${1%_*}|cut -d"/" -f 3`

这个功能目前所知只在bash里支持。

解决办法:

在refresh_schema中,调用refresh_table的语句改成如下

$cat refresh_schema
..
elif [ $OBJECT_TYPE = "T" ]; then
SQL_FILE=${OBJECT_NAME}_fr.sql 
/usr/bin/bash /erdb/bin/refresh_table $SQL_FILE $SCHEMA $SCHEMA_PASS

..

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/207/viewspace-787325/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    233
  • 访问量
    2008664