Mam skrypt w języku Python, który zarządza serią zadań CasperJS i przetwarza wynik. To działa dobrze z wiersza polecenia, ale gdy uruchamiam skrypt w cron, pojawia się błąd:Podproces Pythona zwraca niezerowy status wyjścia tylko w cronie
CalledProcessError: Command '['/path/to/casperjs', '/path/to/doSomething.js', 'args']' returned non-zero exit status 1
W Pythonie, wzywam CasperJS:
response = subprocess.check_output(['/path/to/casperjs', '/path/to/doSomething.js', 'args'], shell=True)
Próbowałem shell=False
i Popen
jako dobrze, ale mam taki sam rezultat. Próbowałem również uczynić całe polecenie ciągiem (zamiast listy), ale to też nie pomogło.
Uruchamianie '/path/to/casperjs /path/to/doSomething.js args'
zwraca kod wyjścia 0 po uruchomieniu w powłoce.
Dodałem również PATH=/usr/bin:/bin:/sbin:/usr/local/bin
do mojego crontabu bez skutku. (Zgodnie z sugestią this question.)
Jakieś pomysły, dlaczego dostaję tylko ten błąd w cronie? Dzięki!!
EDIT: Zgodnie z poniższą odpowiedź, ustawienie shell=False
i stderr=subprocess.STDOUT
wykonaną pracę wszystkim ...
dodam do tego, że najczęstszą przyczyną „działa ta komenda kiedy uruchomić go ręcznie, ale nie pod cron/kierownik/nowobogackich/.. . "jest zmienną środowiskową - nie zawsze PATH - jest inna lub pominięta sol. – mattbornski
Tak, sprawdzałem wszystkie zmienne środowiskowe, ale ustawiając 'shell = False' i dodając' stderr = subprocess.STDOUT', a teraz wszystko działa w magiczny sposób? !! – arboc7
@mattbornski: Zgadzam się. To albo to, albo może proces ma problemy z działaniem pod jakimkolwiek użytkownikiem, w którym skonfigurowano crontab. Nie chciałem spekulować za dużo, ale raczej spróbuj ustalić, jaki jest prawdziwy błąd: – jdi