2013-07-22 3 views
0

Скрипт работает от терминала, но не из кода сценария crontab.The и ошибок я получаю написано ниже:Сценарий работает от терминала, но не от crontab?

Script

#!/usr/bin/python 
import subprocess 
subprocess.call(['touch','yahoo.txt']) 

Ошибка из CRONTAB почты

From [email protected] Mon Jul 22 21:10:05 2013 
Return-Path: <[email protected]> 
Received: from vps.server.com (localhost [127.0.0.1]) 
    by vps.server.com (8.14.4/8.14.4/Debian-2ubuntu2) with ESMTP id r6MHA3ll002017 
    for <[email protected]>; Mon, 22 Jul 2013 21:10:03 +0400 
Received: (from [email protected]) 
    by vps.server.com (8.14.4/8.14.4/Submit) id r6MHA1sr002016 
    for root; Mon, 22 Jul 2013 21:10:01 +0400 
Date: Mon, 22 Jul 2013 21:10:01 +0400 
Message-Id: <[email protected]> 
From: [email protected] (Cron Daemon) 
To: [email protected] 
Subject: Cron <[email protected]> cd /root/; python mkdir.py 
Content-Type: text/plain; charset=ANSI_X3.4-1968 
X-Cron-Env: <SHELL=/bin/sh> 
X-Cron-Env: <HOME=/root> 
X-Cron-Env: <PATH=/usr/bin:/bin> 
X-Cron-Env: <LOGNAME=root> 

': [Errno 2] No such file or directory 
+0

'cron' использует другую среду, чем у вас в вашей оболочке. Попробуйте перейти по абсолютному пути к 'yahoo.txt', чтобы узнать, помогает ли это – inspectorG4dget

+0

@ inspectorG4dget. Я понял, что скрипт должен создать« yahoo.txt »в каталоге, где находится скрипт. –

+0

Возможно, попробуйте 'subprocess.call (['/ path/to/touch', 'yahoo.txt')'? – inspectorG4dget

ответ

2

У вас есть буквальный возврат каретки в командной строке (созданный каким-то ошибочным редактором или пользователем Windows или некоторыми такими):

$ python nosuchfile.py 
python: can't open file 'nosuchfile.py': [Errno 2] No such file or directory 
$ python nosuchfile.py^M 
': [Errno 2] No such file or directory 

(the^M выше, я создал, набрав control-V control-M, где control-V - мой символ «lnext»).

Сообщение об ошибке печатает имя файла, включая возврат каретки, а затем остальные символы перезаписывают начальную часть ошибки. Обратите внимание, что если вы сделаете имя файла только немного больше, вы будете видеть его часть:

$ python verylongfilenamethatdoesnotexist.py^M 
': [Errno 2] No such file or directoryamethatdoesnotexist.py 

Чтобы исправить это, откройте запись кронтаба/файл с помощью редактора, который позволяет делать то, что поддельный carriage- вернуть.

+0

И поскольку сценарий имеет '#!/Usr/bin/python', имеет смысл вызывать его напрямую, а не передавать его в качестве аргумента в команду' python'. –

+0

@KeithThompson: ну, предполагая, что '/ usr/bin/python' - правильный путь. (Мои сценарии в основном используют '/ usr/bin/env python', хотя мне приходилось использовать внешний скрипт оболочки, чтобы выяснить, какой питон использовать, но это было при предыдущем $ work) – torek

+0

@torek Thanx this problem i сохранял cronjobs от webinterface до текстового файла, чем копирование содержимого txtfile в crontab, вот где я думаю, что получаю возврат каретки. –

Смежные вопросы