【问题标题】:different results out of crontab and manual runcrontab 和手动运行的不同结果
【发布时间】:2014-02-20 21:30:28
【问题描述】:

我正在运行一个 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 条目一样。它们应该在日志文件中产生相同的内容,不是吗?

【问题讨论】:

  • 您是否安装了 IBM 数据服务器客户端(或其他合适的 DB2 客户端软件包)?
  • @mustaccio:是的,我有一个命令行工具可以用作 db2 客户端。只要输入db2,我就可以连接到db2数据库。所以它看起来像一个 python 问题,而不是一个 db2 问题。
  • 尝试强制加载db2配置文件“.~db2inst1/sqllib/db2profile”
  • 你可以通过运行一些脚本来检查你的 crontab 环境:* 21 * * * python -c "import sys; print sys.path()" > file.txt
  • 查看$ man 5 crontab。您可以在 crontab 中设置变量。例如,您可以指定 PYTHONPATH='/path/to/include'

标签: python db2 crontab


【解决方案1】:

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

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

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

另外,如果您创建另一个 shell,那么新的 shell 将无法保留 db2profile 或连接。

【讨论】:

  • 猜你是对的,伙计。我将再等 50 分钟以验证结果。尽管如此,我的直觉告诉我你成功了。
  • 不想等的可以*/1 * * * * python -c "import DB2; print 'hey!'" > some_log.txt &2>1
猜你喜欢
  • 2017-01-21
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 2016-08-02
  • 2020-12-26
  • 2011-01-14
  • 2020-09-10
  • 2018-07-20
相关资源
最近更新 更多