2014-02-20 70 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

相關問題