2014-02-25 76 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'。但我不知道究竟有什麼區別。我認爲兩者都應該每分鐘執行一次。 –