crontab和手动运行的结果不同

时间:2014-02-20 21:30:29

标签: python db2 crontab

我正在运行python脚本将一些数据加载到db2数据库中。然而,我想出了以下模块加载错误:

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模块目录:

[dbadmin@bldr2:/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条目那样。他们应该在日志文件中生成相同的内容,不应该吗?

1 个答案:

答案 0 :(得分:1)

尝试强制加载db2配置文件。假设实例位于db2inst1

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

问题是cron没有加载.profile,db2profile是从.profile加载的。

此外,如果您创建另一个shell,则该新shell无法保留db2profile或连接。