免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2913 | 回复: 8
打印 上一主题 下一主题

手动执行一个shell没有问题,换成crontab定时执行就出错,请指点 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-07-05 18:24 |只看该作者 |倒序浏览
---------
本人写了一个shell,shell文件名为execbat.sh,保存路径为:/export/home/stsuser
sehll文件内容如下:
-------------------------------------------
#!/bin/sh
cd /export/home/stsuser/nas/dts
./data_bat
------------------------------------------
shell的目的,我想先进入目录/export/home/stsuser/nas/dts
然后执行此目录下的程序data_bat

现在用手工执行,使用用户stsu,telnet登录系统,先进入目录/export/home/stsuser
直接运行shell文件./execbat.sh
data_bat程序可以可以正常执行,

现在改用crontab定时执行,使用用户stsu,telnet登录系统,crontab中加入如下任务:
25 18 * * * /export/home/stsuser/execbat.sh

说明一下,程序data_bat是pro*c程序,由data_bat.pc文件编译而成的可执行文件,
文件内容如下的形式:
------------------------------------------------------------------------------------------
#include <stdio.h>
#include <string.h>
.....
#include <sqlca.h>

main()
{
        char db_username[10];
        char db_passwd[10];
        memset(db_username,0,sizeof(db_username));
        memset(db_passwd,0,sizeof(db_passwd));
        
        /*读配置文件得到数据库用户名及密码*/
        ReadCfgFile("scfgfile.cfg","dbusername",db_username);
        ReadCfgFile("scfgfile.cfg","dbpaswd",db_passwd);
        
        EXEC SQL CONNECT :db_username IDENTIFIED by :db_passwd;
        if ( sqlca.sqlcode != 0 )
        {
                printf("connect database error. errcode[%d]",sqlca.sqlcode);
                return -1;
        }
        
        /*其他处理语句*/
        .......
        
        
        EXEC SQL COMMIT WORK RELEASE;
        return 0;
}
------------------------------------------------------------------------------------------
当用定时任务时,在连接数据库时,出现如下错误信息:
connect database error. errcode[-12545]

本人查询了错误:
ORA-12545: Connect failed because target host or object does not exist
Cause: The address specified is not valid, or the program being connected to does not exist.

看了错误,本人改了data_bat.pc代码,数据库连接处改成如下:
-------------------------------------------------------------------------------
EXEC SQL BEGIN DECLARE SECTION;
        VARCHAR  uid[200];
EXEC SQL END DECLARE SECTION;

main()
{
        char cnnstr[128];
        memset(cnnstr,0,sizeof(cnnstr));
        
        strcpy(cnnstr,"admin/nas4321@nasdat");
        strcpy ((char *)uid.arr,cnnstr);
        uid.len=(unsigned short)strlen((char *)uid.arr);
        EXEC SQL CONNECT :uid;
        if ( sqlca.sqlcode != 0 )
        {
                printf("connect database error. errcode[%d]",sqlca.sqlcode);
                return -1;
        }
        
        /*其他处理语句*/
        ...
        
-------------------------------------------------------------------------------
可用crontab定时执行还是有错:
connect database error. errcode[-12154]

本人百思不得其解,相同的用户,为何使用手工直接执行就没有任务问题,换成
crontab就会出问题,恳请高人指点,这是怎么了,如何解决?谢谢!

对了,系统为:
SunOS nas.sz.gmcc.net 5.8 Generic_117350-25 sun4u sparc SUNW,Sun-Fire

--

论坛徽章:
0
2 [报告]
发表于 2006-07-05 19:03 |只看该作者
自己顶一下,希望高人尽快指点一下,实在想不明白

论坛徽章:
0
3 [报告]
发表于 2006-07-05 19:09 |只看该作者
大概少环境变量吧
试试用su来执行命令,或直接在SHELL中设环境变量

论坛徽章:
0
4 [报告]
发表于 2006-07-05 19:47 |只看该作者
是呀,crontab执行的程序需要设置你所需的环境变量的
应该是ORACLE所需的环境变量都没设

论坛徽章:
0
5 [报告]
发表于 2006-07-05 20:05 |只看该作者
25 18 * * * . .profile;/export/home/stsuser/execbat.sh

论坛徽章:
0
6 [报告]
发表于 2006-07-06 10:32 |只看该作者
现改为:
25 18 * * * cd; ./.profile; /export/home/stsuser/execbat.sh
还是错误
晕!!!!

论坛徽章:
0
7 [报告]
发表于 2006-07-06 10:58 |只看该作者
应该是环境变量的问题。
记得有一次在安装jabberd服务器的时候,用su root装,怎么都不成功。
后来用了root直接登录进行安装,一次成功
当时很是郁闷了一阵子

论坛徽章:
0
8 [报告]
发表于 2006-07-06 12:51 |只看该作者
环境变量的问题
傻办法:
用env查看与之相关的环境变量,然后在你的脚本前加入相关的  export  ..... 语句,应该就可以了。

论坛徽章:
0
9 [报告]
发表于 2006-07-07 16:33 |只看该作者
已经OK了,就是环境变量的问题,
在shell中加入用到的环境变量就可以了,
谢谢各位,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP