2014-02-25 77 views
0

我正在使用csvimporter将一些csv文件导入到Django模型中。我有2个脚本 - 一个python脚本取文件:Django:Cron作业未执行python脚本

import subprocess 

subprocess.call("python manage.py csvimport --model='csv_reader.csv' /Users/path_to_csv", shell = True) 

而且Django的脚本从模型中删除对象:

from csv_reader.models import * 

csv.objects.all().delete() 

当从shell手动运行这两个脚本做工精细。但是,当我添加cron作业执行脚本的执行,它不工作,虽然它们记录在cron日志:

Feb 25 10:21:00 Liubous-MacBook-Pro.local /usr/sbin/cron[43055]: (yudasinal1) CMD (/Users/path_to_script) 

我尝试添加一个cronjob这样的:

DJANGO_SETTINGS_MODULE=project.settings 
* * * * * /Users/path_to_csv/test_subprocess.py 

在哪里在实际的脚本中,我在文件的顶部添加了#!/usr/bin/env python

除了我尝试添加此的cronjob:

DJANGO_SETTINGS_MODULE=project.settings 
    * * * * * python /Users/path_to_csv/test_subprocess.py 

所有这些都记录到日志的cron,但遗憾的是,没有被执行的实际功能。

任何帮助,将不胜感激!

+0

用芹菜代替:) – pleasedontbelong

+0

我想先用芹菜的,但后来我想,也许这些2简单的操作芹菜可能太多,因为它提供的方式不仅仅是安排任务 – lulu

+0

(9小时后)如果你仍然有这个问题,请考虑使用芹菜:)大声笑 – pleasedontbelong

回答

0

首先检查您的crontab是否正在运行。添加一个作业在tmp文件夹中创建一个文件。如果它正在运行。试着给完整路径,蟒蛇就像你的Django项目/ manage.py的

*在/ usr /斌/ Python中的/ home /路径...

0

在你的终端写crotab -e。还有把你的

* * * * * /usr/bin/python /Users/path_to_csv/test_subprocess.py 

而在test_subprocess.py添加

DJANGO_SETTINGS_MODULE=project.settings 

,并注意DJANGO_SETTINGS_MODULE =如果您运行的项目文件夹中的这个cron作业project.settings才会工作。因此,这将是更好地使用它作为DJANGO_SETTINGS_MODULE =/pathToProject/project.settings

0

!在/ usr /斌/包膜蟒蛇是好的

刚刚成立的项目设置完整路径DJANGO_SETTINGS_MODULE

DJANGO_SETTINGS_MODULE = /用户/ path_to_project/project.settings

          • python/Users/path_to_csv/test_subprocess。PY
+0

@Özgür_Eroğlu所以我在文件中留下了#!/ usr/bin/env python,并将我的cronjob更改为:DJANGO_SETTINGS_MODULE =/Users/path_to_settings/settings.py * * * * */Users/path_to_script/test_subprocess.py没有任何工作仍然,不幸的是:( – lulu

1

第1步:添加家当脚本

UNIX脚本使用一种叫做行 “Shebang

所以,你的第一行应该看起来像这个:

#!/usr/bin/env python 

扑进2:使脚本可执行

  1. 转到文件夹脚本mysript.py
  2. 在控制台执行chmod +x myscript.py
  3. 通过使用./myscript.py执行它来验证它是否可执行。

步骤3:将它添加到CRON

  1. 类型crontab -e在终端。
  2. 添加一行:

    30 13 * * * /home/yourusername/myscript.py

  3. 验证与crontab -l一切工作。

(见cyberciti.biz了解更多信息)

调试Python脚本

import datetime 
import getpass 

now = datetime.datetime.now() 

# Open file to append 
with open("/home/user/myscript.log", "a") as f: 
    f.write("Script started at %i.%i.%i (%i:%i:%i) by %s" % (now.day, now.month, now.year, now.hour, now.minute, now.second, getpass.getuser())) 

[...] 
with open("/home/user/myscript.log", "a") as f: 
    f.write("File 'xy' was opened.") 
+0

我一步一步地按照你的建议(该脚本做了它当我运行./myscript.py时的目的),它也记录在cron log/var/log/cron日志。我的cronjob现在看起来像这样:* * * * * /Users/path_to_script/test_subprocess.py但是,不幸的是,当我检查csv文件是否被导入时(这是脚本的作用),事实并非如此。你有什么可能是错误的其他建议吗?谢谢! – lulu

+0

嗯。我最近遇到了一个奇怪的问题,那就是TCL脚本使用了环境变量。在这种情况下,我可以通过tclsh或janus(另一个类似shell的环境)执行脚本,并得到不同的结果。你在脚本中使用environemnt变量吗?我建议在'test_subprocess.py'中添加一些行,将其写入日志文件中。在开始时写一些东西(例如“在12:31开始执行”),并在“关键”部分记录更多日志(例如“打开文件xy”,“开始导入”,“结束导入”,...) –

+0

@yudasinal :我从来没有在crontab中看过星星。而不是'*/1 * * * */Users/path_to_script/test_subprocess.py'。但我不知道究竟有什么区别。我认为两者都应该每分钟执行一次。 –