我试图从cron运行Django管理命令.我正在使用virtualenv来保持我的项目沙箱.
我在这里和其他地方看过一些示例,它们显示了virtualenv中的运行管理命令:
0 3 * * * source /home/user/project/env/bin/activate && /home/user/project/manage.py command arg
Run Code Online (Sandbox Code Playgroud)
但是,即使syslog在任务应该启动时显示一个条目,该任务也从未实际运行(脚本的日志文件为空).如果我从shell手动运行该行,它将按预期工作.
我目前可以通过cron运行命令的唯一方法是打破命令并将它们放入一个愚蠢的bash包装器脚本中:
#!/bin/sh
source /home/user/project/env/bin/activate
cd /home/user/project/
./manage.py command arg
Run Code Online (Sandbox Code Playgroud)
编辑:
ars提出了一个有效的命令组合:
0 3 * * * cd /home/user/project && /home/user/project/env/bin/python /home/user/project/manage.py command arg
Run Code Online (Sandbox Code Playgroud)
至少在我的情况下,调用virtualenv的激活脚本什么也没做.这个有用,等等.
我通过输入crontab -e在ubuntu环境中为root用户设置了cronjob
34 11 * * * sh /srv/www/live/CronJobs/daily.sh
0 08 * * 2 sh /srv/www/live/CronJobs/weekly.sh
0 08 1 * * sh /srv/www/live/CronJobs/monthly.sh
Run Code Online (Sandbox Code Playgroud)
但是cronjon不会跑.我已经尝试检查cronjob是否正在运行
pgrep cron
并提供进程ID 3033. shell脚本调用python文件,用于发送电子邮件.运行python文件是可以的.它没有错误,但是cron没有运行.daily.sh文件中包含以下代码.
python /srv/www/live/CronJobs/daily.py
python /srv/www/live/CronJobs/notification_email.py
python /srv/www/live/CronJobs/log_kpi.py
Run Code Online (Sandbox Code Playgroud) 我有一个兄弟姐妹的Python驱动程序和库脚本:
/home/mydir/pythonProjs/
Run Code Online (Sandbox Code Playgroud)
driver.py
lib.py
在driver.py我有线:
from lib import method1
从Linux上的命令行获得以下成功:
python /home/mydir/pythonProjs/driver.py
Run Code Online (Sandbox Code Playgroud)
但是当我在crontab中尝试以下内容时:
10 1 * * * export PYTHONPATH=~/mydir/pythonProjs; python /home/mydir/pythonProjs/driver.py
我收到错误:
ImportError: No module named lib.method1
Run Code Online (Sandbox Code Playgroud)
我还尝试将crontab命令中的路径设置更改为完全限定的路径/home/mydir/pythonProjs,省略'export',并且还尝试编写.sh文件(使用必要的#!bin/bash ...)
我有一个主要问题和一个后续问题:主要:解决问题的最佳方法是什么?跟进:cron的路径访问背后的理念是什么?
在我投票过快之前,我会提到我已阅读但未成功(或正确解析)以下内容: - 我在哪里可以设置crontab将使用的环境变量? - 运行Python的Crontab问题 - http://pythonadventures.wordpress.com/2012/03/31/calling-a-python-script-from-crontab/
我在使用这三种技术时遇到了一些困难.
Cron入门:
* * * * * /usr/bin/python /path/to/python/email/program.py
Run Code Online (Sandbox Code Playgroud)
Python程序:
1 #!/usr/bin/python
2
3 import imaplib
4 import os
5 import sys
6 import pynotify
7
8 if not pynotify.init('Emails'):
9 sys.exit(1)
10
11 with open('/path/to/python/email/count.tmp', 'r') as file:
12 data = int(file.read().strip())
13 client = imaplib.IMAP4_SSL('mail.sever.com', '993')
14 client.login('user@server.com', 'password')
15 client.select()
16
17 unseen = client.search(None, 'UnSeen')[1][0].split()
18
19 if unseen[0] == '':
20 pass
21 else:
22 if len(unseen) != data:
23 n = pynotify.Notification(str(len(unseen) - data) …Run Code Online (Sandbox Code Playgroud)