Udało mi się zaskoczyć skryptem powłoki przeznaczonym do uruchamiania co 30 minut w cronie na serwerze Redhat 6. Skrypt powłoki jest po prostu po prostu komendą do uruchomienia skryptu Pythona.scl włącz python27 bash
Pythona rodzimej wersji na serwerze to 2.6.6, ale wersja pythonowa wymagana przez ten konkretny skrypt to python 2.7+. Jestem w stanie łatwo uruchomić to w wierszu poleceń za pomocą polecenia „SCL” (w tym przykładzie zawiera python -V polecenie, aby pokazać zmianę wersji):
$ python -V
Python 2.6.6
$ scl enable python27 bash
$ python -V
Python 2.7.3
W tym momencie mogę uruchomić Pythona 2.7 .3 skrypty na linii poleceń bez problemu.
Oto szkopuł.
Po wydaniu polecenia scl enable python27 bash
rozpoczyna się nowa sesja powłoki bash, która (ponownie) jest w porządku dla pracy z interaktywnym wierszem poleceń. Ale gdy robimy to wewnątrz skryptu powłoki, natychmiast po uruchomieniu polecenia bash skrypt kończy działanie z powodu nowej sesji.
Oto skrypt powłoki, który zawodzi:
#!/bin/bash
cd /var/www/python/scripts/
scl enable python27 bash
python runAllUpserts.py >/dev/null 2>&1
To po prostu zatrzymuje się jak tylko natrafi linii 4, ponieważ „bash” wyskakuje go skryptu i do świeżej powłoki bash. Więc nigdy nie widzi rzeczywistego polecenia Pythona, którego potrzebuję do uruchomienia.
Plus, jeśli uruchamiany co 30 minut, to dodaje nowe bash za każdym razem, co jest kolejnym problemem.
Jestem niechętny, aby zaktualizować macierzystą wersję python na serwerze do wersji 2.7.3 właśnie teraz z kilku powodów. Repliki yum redhat nie mają jeszcze python 2.7.3, a ręczna instalacja znajduje się poza systemem aktualizacji yum. Z tego co rozumiem, yum działa na pythonie 2.6.x.
Oto gdzie znalazłem metodę przy użyciu SCL
Wyjaśnij swój kod –