Crontab无法执行django管理命令

1 投票
3 回答
607 浏览
提问于 2025-04-18 08:59

我写了一个脚本,用于在Django中将保存在数据库里的待发送邮件发给用户。这个脚本有一个管理命令,应该每小时通过定时任务(crontab)来调用,以发送邮件。但是,每当这个定时任务执行时,我都会收到以下错误:

django.core.exceptions.ImproperlyConfigured: Error loading psycopg2 module: libpq.so.5: cannot open shared object file: No such file or directory

我的Django应用程序在正常运行时没有任何错误。但是运行定时任务时却失败了。以下是我的定时任务配置:

0 * * * * source /opt/portal/virtEnv/bin/activate && python /opt/portal/websource/manage.py send_queued_messages --limit=1

有没有人知道怎么解决这个问题?

3 个回答

0

据我所知,你不能在定时任务(cronjob)中使用activate脚本,只需要直接指向你虚拟环境中的python解释器,这样就可以正常工作了:

0 * * * * /opt/portal/virtEnv/bin/python /opt/portal/websource/manage.py send_queued_messages --limit=1
0

我找到了解决办法。
我需要在定时任务的配置中添加一个叫做 LD_LIBRARY_PATH 的环境变量,并把它指向 postgres 数据库的 lib 文件夹。

现在一切都运行得很顺利。

0

试着指向虚拟环境里的Python版本。不要激活虚拟环境,也不要直接使用Python。

可以试试这个:

0 * * * * /opt/portal/virtEnv/bin/python /opt/portal/websource/manage.py send_queued_messages --limit=1

编辑过:把命令开头的'source'去掉了。

撰写回答