2014-02-20 37 views
0

我正在运行一个python脚本来将一些数据加载到db2数据库中。然而,我想出了以下模块加载错误:crontab和手动运行的不同结果

Traceback (most recent call last): 
    File "myscript.py", line 22, in ? 
    import DB2 
    File "/opt/freeware/lib/python2.3/site-packages/DB2.py", line 12, in ? 
    import _db2 
ImportError: Could not load module /opt/freeware/lib/python2.3/site-packages/_db2.so. 
    Dependent module libdb2.a(shr.o) could not be loaded. 
Could not load module libdb2.a(shr.o). 
System error: No such file or directory 
Could not load module /opt/freeware/lib/python2.3/site-packages/_db2.so. 
    Dependent module /opt/freeware/lib/python2.3/site-packages/_db2.so could not be loaded. 

这里是我的Python模块目录:

[[email protected]:/opt/freeware/lib/python2.3/site-packages]# ls -l 
total 800 
-rw-r--r-- 1 root  system   8142 May 30 2008 DB2.py 
-rw-r--r-- 1 root  system  17133 May 30 2008 DB2.pyc 
-rw-r--r-- 1 root  system   119 Aug 09 2005 README 
-rwxr-xr-x 1 root  system  66550 May 30 2008 _db2.so 
drwxr-xr-x 2 root  system   256 Mar 31 2009 logging 
-rw-r--r-- 1 root  system  307200 Jan 13 15:19 python-modules.tar 

出了什么问题吗?那么修复会是什么?

更新: 我手动重新运行该命令,并且它成功没有吐痰错误。然而,这项工作原本是crontab条目,如:

18 * * * * myscript.py [parameter_list] >cron_nag.log 2>&1 

我在上面贴出来的日志是在这个“cron_nag.log”。但是当我手动重新运行命令时,错误被清除,不再抱怨模块加载,并且一切都很顺利。

为什么crontab条目和手动运行之间的区别?我使用相同的用户dbadmin来手动运行命令,如crontab项所做的那样。他们应该在日志文件中产生相同的内容,不是吗?

+0

您是否安装了IBM Data Server Client(或其他适当的DB2客户端软件包)? – mustaccio

+0

@mustaccio:是的,我有一个命令行工具用作db2客户端。只需键入'db2',我就可以连接到db2数据库。所以它看起来像一个python问题,而不是一个db2问题。 –

+0

Python 2.3是一个非常*旧的版本。任何机会,你可以安装一个新的,如2.7? –

回答

1

试图强制加载db2配置文件。假定实例是在DB2INST1

18 * * * * . ~db2inst1/sqllib/db2profile ; myscript.py [parameter_list] >cron_nag.log 2>&1 

的问题是,cron的不加载你的.profile文件,而db2profile作为从.profile文件加载。另外,如果您创建另一个shell,那么新的shell无法保留db2profile或连接。

+0

猜你是对的,男人。我会再等50分钟来验证结果。尽管如此,我的直觉告诉我你击中了它。 –

+1

如果你不想等待,你可以使用'*/1 * * * * python -c“import DB2;打印'hey!'”> some_log.txt&2> 1'。 – 2014-02-21 00:03:35

相关问题