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”
/root/anaconda3/bin/python
plik skryptu Pythona? Jest to mylące, ponieważpython
jest to program obsługi, który chcesz uruchomić. Czy zaczyna się od#!/usr/bin/python
czegoś 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.txt
pliki zostały wcześniej usunięte, z jakimi uprawnieniami i nazwami użytkowników / grup zostały utworzone?/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. Dodaj2>&1
na końcupython
połączenia, aby zobaczyć błędy.stderr
: tak jak ty, założyłem, że będzie włączonastdout
, 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.Odpowiedzi:
Po krótkiej dyskusji (patrz komentarze powyżej) wydaje się, że podstawowym problemem jest zapisanie
python
tekstu wersjistderr
, a nie oczekiwaniestdout
, gdzie nic nie jest zapisane, stąd pusty plik.Zasadniczo podczas diagnozowania
crontab
problemów dobrym pomysłem jest rejestrowanie błędów i danych wyjściowych w tym samym lub innym pliku. Dodając2>&1
na końcupython
wiersza wywołania, tekst wersji pojawił się wpv.txt
:źródło