Crontab nie działa skrypt Pythona, żadnych błędów, nic


1

Spędziłem już ponad 1 godzinę, aby zrobić to łatwo i całkowicie nie powiodło się: /

Nie mogę się dowiedzieć, dlaczego ten python nie działa na crontabie, podczas gdy działa idealnie w wierszu poleceń ...

Skrypt to (bash):

#!/bin/bash

touch before_zzz_text.txt # to check if cron works at all 
ls > "before_zzz_text.txt" # just to check if I'm in the correct directory

/root/anaconda3/bin/python -V > pv.txt # this is empty! or a white char

touch after_zzz_text.txt # this works new file every minute

W ten sposób wiem, że działa w cronie (pliki .txt są tworzone co minutę - podobnie jak cron działa co minutę).

Jednak pv.txt jest pusty ... więc wygląda na to, że skrypt bash nie działa?

W końcu chcę, aby bardziej skomplikowany skrypt działał w skrypcie bash, ale próbowałem wykopać, dlaczego nie działa, więc aby uprościć to teraz: „/ root / anaconda3 / bin / python -V”


Czy /root/anaconda3/bin/pythonplik skryptu Pythona? Jest to mylące, ponieważ pythonjest to program obsługi, który chcesz uruchomić. Czy zaczyna się od #!/usr/bin/pythonczegoś podobnego? Czy on i wszystkie jego komponenty katalogu mają uprawnienia do wykonania wszystkich? Jest to ważne, ponieważ crontabśrodowisko nie jest takie samo jak dla twojego terminala. Jeśli .txtpliki zostały wcześniej usunięte, z jakimi uprawnieniami i nazwami użytkowników / grup zostały utworzone?
AFH,

„/ root / anaconda3 / bin / python” to ścieżka do interpretera Pythona. To był po prostu „python” wcześniej, ale myślałem, że nie może znaleźć właściwej ścieżki env lub czegoś. W każdym razie po prostu „python -V> pv.txt” też nie działa. Poza tym nie ma komunikatów o błędach, plik pv.txt ic jest pusty ... Czy tak powinno być? „python -V powinien po prostu podać wersję Pythona, a”> pv.txt ”powinien przechowywać tę wiadomość w tym pliku, który na końcu jest pusty ...
kkonrad

Przepraszam, byłem zdezorientowany, ponieważ /root/anaconda3/bin/jest to mało prawdopodobne miejsce dla tłumacza. Zostanie utworzony pusty plik dziennika, jeśli błąd uniemożliwi uruchomienie interpretera. Dodaj 2>&1na końcu pythonpołączenia, aby zobaczyć błędy.
AFH,

W końcu nie ma problemu! Wygląda na to, że brakujący MTA na serwerze ubuntu był w rozsypce. Po dodaniu „2> i 1” do linii python działa !!!!
kkonrad

Nie zdawałem sobie sprawy, że wersja została napisana stderr: tak jak ty, założyłem, że będzie włączona stdout, ale właśnie to potwierdziłem na własnym systemie. Cieszę się, że jesteś w interesach. Myślę, że prześlę odpowiedź, z korzyścią dla innych użytkowników strony.
AFH,

Odpowiedzi:


3

Po krótkiej dyskusji (patrz komentarze powyżej) wydaje się, że podstawowym problemem jest zapisanie pythontekstu wersji stderr, a nie oczekiwanie stdout, gdzie nic nie jest zapisane, stąd pusty plik.

Zasadniczo podczas diagnozowania crontabproblemów dobrym pomysłem jest rejestrowanie błędów i danych wyjściowych w tym samym lub innym pliku. Dodając 2>&1na końcu pythonwiersza wywołania, tekst wersji pojawił się w pv.txt:

/root/anaconda3/bin/python -V > pv.txt 2>&1
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.