Seite 1 von 1

Prüfen ob python Script über Shell gestartet wurde

Verfasst: Freitag 10. Juni 2016, 10:06
von nieselfriem
Hallo!

Ich habe ein Python Script für die Version2.7 geschrieben, welches mit subprocess und Popen ein Ansible-Skript startet. Dieses Script kann manuelle über die bash gestartet werden und ich verwende es auch in einem cronjob. Um den Info-Overhead, den Ansible beim Ausführen an die Shell ausgibt, habe ich das alles etwas kanalisiert und schreibe die Ausgaben der Ansibleskript-Ausführung in eine Variable, die ich dann auswerte um eine mögliche Fehlermeldung daraus zu machen.

Code: Alles auswählen

        ansible_command = 'ansible-playbook /home/devops/ansible/playbooks/info/script.yml -l ' + env_choice
        extra_vars = ' --extra-vars "ip=' + ip + ' date=' + check_date + ' path=' + path + '"'
        ansible_command += extra_vars
        proc = subprocess.Popen(ansible_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE,)
        output = proc.communicate()[0]
        if "ok:" not in output:
            print "\033[1;41mFehler bei XY {0} \033[0m"\
                    .format(ip)
            print output
Nun ist es aber so, dass es bei der Ausführung als cronjob immer zum Fehler führt, weil ddei if-bedingung offenbar nur funktioniert, wenn eine aktive bash dieses Skript ausführt. Wie kann ich bei der Ausführung des Skriptes prüfen, ob es als cronjob läuft oder vom user gestartet wurde? Damit habe ich dann die Möglichkeit die Prüfung zu ändern und Fehler evtl als log-Datei zu schreiben.

VG niesel

Re: Prüfen ob python Script über Shell gestartet wurde

Verfasst: Freitag 10. Juni 2016, 10:40
von Sirius3
@nieselfriem: Du solltest ersteinmal schauen, welchen Fehler es beim Starten per cron gibt, denn prinzipiell sollte das ja schon funktionieren. Du solltest keine Processe per shell=True starten, sondern die Parameter als Liste übergeben:

Code: Alles auswählen

        ansible_command = ['ansible-playbook', '/home/devops/ansible/playbooks/info/script.yml', '-l', env_choice]
        extra_vars = ['--extra-vars', 'ip={} date={} path={}'.format(ip, check_date, path)]
        proc = subprocess.Popen(ansible_command + extra_vars, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        output, error = proc.communicate()
        if "ok:" not in output:
            print "\033[1;41mFehler bei XY {0} \033[0m".format(ip)
            print output
            print error

Re: Prüfen ob python Script über Shell gestartet wurde

Verfasst: Freitag 10. Juni 2016, 11:42
von nieselfriem
naja, das Skript startet schon und läuft auch fast wie gewünscht. Es werden nur eben die Fehlerausgaben erzeugt obwohl der rest funktioniert, weil im cron Modus keine Ausgabe in die Variable output geschrieben wird. Aber ich werde es mal so probieren, wie du es mir geraten hast.

VG niesel