Ich habe einen Haken mit einem Shell-Skript getroffen, die alle 30 Minuten in Cron auf einem Redhat 6-Server ausgeführt werden soll. Das Shell-Skript ist im Grunde nur ein Befehl, um ein Python-Skript auszuführen.scl aktivieren python27 bash
Die native Version Python auf dem Server ist 2.6.6, aber die Python-Version für dieses spezielle Skript ist Python 2.7 +. Ich bin in der Lage, einfach diese auf der Befehlszeile ausführen, indem Sie den „scl“ Befehl (in diesem Beispiel enthält den Python -V Zeigt die Versionsänderung zeigen Befehl):
$ python -V
Python 2.6.6
$ scl enable python27 bash
$ python -V
Python 2.7.3
An dieser Stelle kann ich den Python läuft 2.7 .3 Skripte in der Kommandozeile kein Problem.
Hier ist der Haken.
Wenn Sie den Befehl scl enable python27 bash
eingeben, wird eine neue Bash-Shell-Sitzung gestartet, die (wiederum) für interaktive Befehlszeilenarbeit geeignet ist. Wenn dies jedoch in einem Shell-Skript ausgeführt wird, wird das Skript aufgrund der neuen Sitzung beendet, sobald es den Befehl bash ausführt.
Hier ist der Shell-Skript, die fehlschlägt:
#!/bin/bash
cd /var/www/python/scripts/
scl enable python27 bash
python runAllUpserts.py >/dev/null 2>&1
Es einfach stoppt, sobald es Linie 4 trifft, weil „bash“ erscheint es aus dem Skript und in einen frisch Bash-Shell. Es sieht also nie den eigentlichen Python-Befehl, den ich ausführen muss.
Plus, wenn alle 30 Minuten ausgeführt würde dies eine neue bash jedes Mal hinzufügen, die ein weiteres Problem ist.
Ich bin aus mehreren Gründen derzeit nicht bereit, die native Python-Version auf dem Server auf 2.7.3 zu aktualisieren. Die Redhat-yum-Repos haben noch nicht python 2.7.3 und eine manuelle Installation wäre außerhalb des yum-update-Systems. Soweit ich weiß, läuft yum selbst auf Python 2.6.x.
Hier ist, wo ich die Methode gefunden scl
Code Erklären –