2009-04-03 8 views
5

To właśnie mój plik crontab wygląda następująco:Orzechy z wykonaniem skryptu Pythona przez crontab na debian!

* * * * * root /usr/bin/python /root/test.py >> /root/classwatch.log 2>&1 

To właśnie mój skrypt Pythona wygląda następująco:

#!/usr/bin/python 
print "hello" 

zadanie crona tworzy plik dziennika. Ale jest pusty. Jestem również dość pewny, że plik Pythona nie jest wykonywany.

Doceń każdą pomoc! Grałem z nią przez ostatnie 4 godziny bez powodzenia.

+0

0 1 * * */home/me/myscript jest wymieniony jako poprawny wpis crontab – ojblass

+0

Czy możesz podać nam wynik "whence root", "który root" i "find/-name root 2>/dev /zero"? Debian nie pozwala na określenie użytkownika w crontabie, więc musimy założyć, że root to polecenie, które jest wywoływane (zobacz moją odpowiedź). – paxdiablo

+0

Będziesz musiał opuścić sekcję użytkownika. Raczej su -, edytuj crontab jako root, pomijając nazwę użytkownika i zostanie wykonany pod tym użytkownikiem. –

Odpowiedz

1

Updated ...

Wymień zawartość z

* * * * * date >> /tmp/foo 

Czy ten link pomocy?

Usuń plik, który ma utworzyć. Czy to wraca? Myślałem, że każdy użytkownik ma własny plik crontab, więc użytkownik na linii jest podejrzany.
Czy ktoś gra na ciebie żart i zastępuje binarny python opcją bez op?

Muszę myśleć, że cron nie działa poprawnie, ponieważ echo nie działa. Czy upewniłeś się zmienić katalog wyjściowy na/tmp z echo?

możesz zrobić od (ósemkową zrzutkę) pliku i sprawdzić, czy umieściłeś znak kontrolny lub zakładkę w pliku cron?

+0

1. Gwiezdne rzeczy są dość standardowe. Wszystkie gwiazdy oznaczają wykonanie każdej minuty. 3. Ponieważ większy skrypt jest w python. Treść skryptu Pythona jest tutaj dla abstrakcji. 4. Próbowałem tego. Brak szczęścia. Tak więc problem jest z cronem, jeśli plik dziennika nie pokazuje nawet "cześć" z echa –

0

Czy próbowałeś umieścić skrypt gdzieś indziej (na przykład/usr/local/bin /)?

+0

Myślę, że problem może dotyczyć samego polecenia cron, ponieważ nawet proste "echo hi" nie jest rejestrowane w pliku dziennika . –

0

Działa to dobrze dla mnie na moim systemie Linux RHES 4 dokładnie tak, jak pokazano (UWAGA: usunąłem nazwę użytkownika root w pliku crontab).

Podejrzewam, że coś jest nie tak ze sposobem, w jaki instalujesz swoją pracę cron lub konfiguracją crona w twoim systemie. Jak to instalujesz? Czy używasz crontab -e lub jakiejś innej metody? Czy możesz pomyślnie uruchamiać inne zadania cron dla root?

+0

dobry punkt o jako root ... – ojblass

0

Przyczyną może być zadeklarowane wcześniej zadanie z powodu błędu składni. Czy możesz wkleić cały plik crontab? Twoja linia wygląda dobrze, o ile widzę.

0

Wpis crontab jest poprawny jeśli edytujesz/etc/crontab - jednak jeśli jesteś użyciem crontab normalnego użytkownika (tj crontab -e, crontab crontabfle, etc) wpis korzeń jest składniowo niepoprawne.

0

Spróbuj tylko wysyłanie stdout do pliku dziennika, zamiast zarówno stderr i stout:
/usr/bin/python /root/test.py> /root/classwatch.log

4

Istnieją dwa sposoby utwórz crontab - na użytkownika lub globalnie. Dla globalnej (crontab/etc/crontab) określenie użytkownika, jak za:

# m h dom mon dow user command 
17 * * * * root  cd/&& run-parts --report /etc/cron.hourly 

dla użytkownika crontaby nie, jak za:

[email protected]:~$ crontab -l 
0 * * * * /home/aj/bin/update-foobar 

Aby uzyskać skrypt python działa poprzez #!notacja, po prostu zrobić skrypt wykonywalny (chmod 755 /root/test.py) i wywołać ją bezpośrednio, coś takiego:

/root/test.py 

Jeśli nie chcesz tego zrobić, można uruchomić go za pośrednictwem pyton tłumacza ręcznie, jak:

/usr/bin/python /root/test.py 

zakłada dowolny użytkownik używasz jako (tj użytkownika w pliku/etc/crontab lub użytkownik, którego używasz crontab -e AS) ma pozwolenie, aby zobaczyć skrypt python -/root może być niedostępny dla zwykłych użytkowników, np.

można uzyskać dobry pomysł, czy skrypt jest wykonywany w ogóle, dodając:

import time 
time.sleep(20) # pause for 20 seconds 

a następnie sprawdzenie z „góry” lub „ps aux” lub „pstree”, aby zobaczyć, czy python jest właściwie bieganie.

1
chmod 755 /root/test.py 

a następnie

* * * * * /root/test.py >> /root/classwatch.log 2>&1 

powinno działać.

Powiązane problemy