2013-03-05 23 views
5

Mój skrypt używa mysql, tiny_tds, fileutils i net/ftp. Uruchomiony na rubinach 1.9.3. Działa doskonale, gdy uruchamiam go z poziomu folderu.Wykonywanie skryptu ruby ​​z cron

Jednak, gdy dodaję go do karty cron, tiny_tds ciągle się nie udaje. Nie wiem, czy którykolwiek z pozostałych klejnotów nie jak ja nie może przejdzie ten błąd:

require': no such file to load -- tiny_tds (LoadError)

Próbowałem wykonanie go z tej samej skorupy że crontab by wykorzystać, a ja dostać ten błąd.

Cały skrypt to tylko 1 plik.

Jestem nowy w rubinach, więc moja wiedza jest ograniczona w tworzeniu środowiska we właściwy sposób.

w głowie pliku mam

#!/usr/bin/ruby 
    require "mysql" 
    require "fileutils"; 
    require "tiny_tds" 
    require "net/ftp" 

Krótko mówiąc, mam listę zadań z MySQL, porównać, że na MSSQL plików FTP over i aktualizacji mysql ponownie, gdy zadania są wykonywane.

Muszę uruchomić to z crona.

Po krótkich poszukiwaniach próbowałem ustawić kamienie jako globalne, jednak myślę, że to się nie udało.

Z góry dziękuję za pomoc!

+0

znalazłaś uchwałę do T jego? –

Odpowiedz

5

Wynika to z faktu, że zmienne środowiskowe w wierszu poleceń nie są ustawione podczas wykonywania polecenia crond. Typowymi podejrzanymi są PATH, LD_LIBRARY_PATH i aliasy ustawione podczas logowania.

Można zobaczyć, co robi crond: using crontab -e

* * * * * set > /tmp/setvals 

tworzyć powyższy wpis. pozwól jej działać przez chwilę. Wróć do crontab -e i usuń ten nowy wpis.

Porównaj to, co jest w /tmp/setvals z tym, co daje twoja powłoka, gdy wydasz polecenie set w linii poleceń. Następnie możesz podjąć kroki w celu modyfikacji rzeczy w środowisku pracy cron.

2

Istnieje wiele sposobów na RVM do współpracy z cron, jeśli używasz skryptu następnie najprostszą jest po prostu użyć RVM - co oznacza nie używać systemu rubin #!/usr/bin/ruby - wystarczy umieścić w pierwszym wierszu #!/path/to/rvm/wrappers/ruby-1.9.3-p392/ruby

można używać aliasów, aby zapobiec hardcoding ścieżkę jeden rubinowy w skrypcie:

rvm alias create my_app 1.9.3 

a następnie w nagłówku script (pierwsza linia):

#!/path/to/rvm/wrappers/my_app/ruby