W tej chwili mam skrypt, który używa numpry, który chcę uruchomić automatycznie na serwerze. Kiedy ssh i uruchomię go ręcznie, działa dobrze. Jednak gdy ustawiłem go do pracy jako zadanie Cron, nie może znaleźć numpy. Najwyraźniej ze względu na współdzielone środowisko serwera Cron Demon z jakiegoś powodu nie może znaleźć numpy. Skontaktowałem się z obsługą techniczną hosta serwera i kazałem mi skonfigurować VPS lub uzyskać własny cholerny serwer. Czy jest jakiś sposób, aby włamać się do tego obejścia? Być może, przenosząc niektóre pliki numpy do tego samego katalogu co skrypt?

2
Strill 27 wrzesień 2011, 02:11

4 odpowiedzi

Najlepsza odpowiedź

Jeśli masz zainstalowany numpy gdzieś na serwerze, możesz dodać go do ścieżki importu dla Pythona; Na początku skryptu rób coś takiego:

import sys
sys.path.append("/path/to/numpy")
import numpy
2
SingleNegationElimination 26 wrzesień 2011, 22:17

Cronjob biegnie z pustym środowiskiem. Jako taki, ale nie używa tego samego binarnego Pythona, ponieważ jesteś na powłoce, czy masz zestaw Pythonpath, który nie będzie miał pod Crontab.

Powinieneś uruchomić env -i HOME=$HOME sh, aby uzyskać faksem środowiska Cronjob. Ustaw zmienne środowiskowe, aż twoje polecenie działa i je nagrywać.

Następnie możesz ustawić je w pliku Crontab, ponownie za pomocą polecenia ENv, jak:

* * * * * env PYTHONPATH=/my/pythonpath OTHERVAR=correct-value /path/to/mycommand
2
bukzor 3 październik 2011, 17:02

Procesy wywołane przez demona Cron mają minimalne środowisko, na ogół składający się z $HOME, $LOGNAME i $SHELL.

Brzmi jak numpy jest być może gdzieś na twoim $PYTHONPATH? Jeśli tak, musisz określić, że w linii Crontab. Jak na przykład

/usr/bin/env PYTHONPATH=... <then the command to run>

Jeśli jesteś w systemie Linux za pomocą Vixie Cron, możesz również określić zmienne globalne w Crontab, używając linii takich jak

# my environment settings
PYTHONPATH = <path>
SOMETHING_ELSE = blah

<then my normal cron line>

Patrz man -s 5 crontab

1
donkopotamus 26 wrzesień 2011, 22:24

Twoja praca Cron prawdopodobnie wykonuje z innym tłumaczem Pythona.

Zaloguj się jako ty (przez SSH) i powiedz which python. To powie ci, gdzie jest twój Python. Następnie wykonaj swoje zadanie CRON wykonać ten tłumacz Pythona, aby uruchomić skrypt lub chmod +x swój skrypt i umieść ścieżkę w linii #! na górze skryptu.

1
Seth 26 wrzesień 2011, 22:29