Ansible: module_stdout: "/bin/sh: 1: /usr/bin/python: nicht gefunden\r\n",

Erstellt am 21. Dez. 2016  ·  19Kommentare  ·  Quelle: ansible/ansible

ansible -m ping -u ubuntu us-west-2a
35.166.197.222 | GESCHEITERT! => {
"geändert": falsch,
"fehlgeschlagen": wahr,
"module_stderr": "Gemeinsame Verbindung zu 35.166.197.222 geschlossen.\r\n",
"module_stdout": "/bin/sh: 1: /usr/bin/python: nicht gefunden\r\n",
"msg": "MODULFEHLER"
}

affects_2.3 needs_info needs_template

Hilfreichster Kommentar

Verwenden Sie einfach ansible_python_interpreter=/usr/bin/python3 in Ihrer Inventardatei

Alle 19 Kommentare

Bitte verwenden Sie die Problemvorlage, anstatt sie zu löschen - dies ist kein umsetzbarer oder nützlicher Fehlerbericht. Ich vermute, Sie verwenden Ubuntu 16+ oder etwas anderes ohne installiertes Standard-Python3, aber das können wir ohne einen vollständigen Fehlerbericht nicht sagen.

In den neuesten Images in AWS ist kein verwendbares Python installiert ... Sie müssen dies als Voraufgabe hinzufügen:

  pre_tasks:

    - name: Refresh apt cache
      become: no
      local_action: shell ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=5 {{ inventory_hostname }} sudo apt-get update

    - name: Install Python-apt to pull in Python
      become: no
      local_action: shell ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ConnectTimeout=5 {{ inventory_hostname }} sudo apt-get install --no-install-recommends --assume-yes python-apt

Ich muss dies in meinen Aufgaben verwenden, damit das AMI gut mit Ansible funktioniert.

Ubuntu Xenial hat Python3 standardmäßig installiert und ich denke, es befindet sich unter /usr/bin/python3 (ich bin mir jedoch nicht ganz sicher).

Siehe diese Antwort: http://stackoverflow.com/questions/32429259/ansible-fails-with-bin-sh-1-usr-bin-python-not-found

Beachten Sie, dass es wichtig ist, das Sammeln von Fakten für die Initialisierungsaufgaben zu deaktivieren.

Ja, der Pfad des Python-Interpreters kann zur Laufzeit angegeben werden als
-e 'ansible_python_interpreter=/usr/local/bin/python' während das Skript ausgeführt wird.

Aber es muss eine Möglichkeit in der ansible-Konfigurationsdatei geben, wo wir den Python-Interpreter-Pfad erwähnen können ODER ist er dort?

Wenn nicht, muss es implementiert werden.

Verwenden Sie einfach ansible_python_interpreter=/usr/bin/python3 in Ihrer Inventardatei

@guruprasad85 Dieses Problem wartet auf Ihre Antwort. Bitte antworten Sie oder das Problem wird geschlossen.

Klicken Sie hier für Bot-Hilfe

@guruprasad85 Grüße! Vielen Dank, dass Sie sich die Zeit genommen haben, dieses Thema zu öffnen. Damit die Community Ihr Problem effektiv bearbeiten kann, benötigen wir einige weitere Informationen.

Hier sind die Artikel, die wir in Ihrer Beschreibung nicht finden konnten:

  • Problemtyp
  • Ansible-Version
  • Komponentenname

Bitte legen Sie die Beschreibung dieses Problems mit dieser Vorlage fest:
https://raw.githubusercontent.com/ansible/ansible/devel/.github/ISSUE_TEMPLATE.md

Klicken Sie hier für Bot-Hilfe

Da ich Python2 brauchte, habe ich als erste Aufgabe hinzugefügt:

- name: dependency provisioning
  hosts: all
  become: yes
  become_method: sudo
  gather_facts: false
  tasks:
    - name: install python2
      raw: sudo apt-get -y install python-simplejson

Mehr Infos hier

@guruprasad85 Dieses Problem wartet auf Ihre Antwort. Bitte antworten Sie oder das Problem wird geschlossen.

Klicken Sie hier für Bot-Hilfe

Die obigen Erläuterungen reichen aus, um dieses Problem zu lösen.

Einige zusätzliche Lektüre:

http://docs.ansible.com/ansible/faq.html#how -do-i-handle-python-pathing-not-have-a-python-2-x-in-usr-bin-python-on- a-remote-maschine

Bei weiteren Fragen wenden Sie sich bitte an IRC oder die Mailingliste:

Sie können auch die _Sammeln von Fakten_ deaktivieren, fügen Sie dies in Ihr Buch ein

- hosts: anything
  gather_facts: False

@bcoca @sivel Gibt es Pläne, dies noch einmal zu besuchen? Es scheint mir, dass Ansible zumindest versuchen sollte, /usr/bin/python3 (oder /usr/bin/python2 nach Bedarf) zu verwenden, wenn /usr/bin/python nicht verfügbar ist.
@SpamapS berichtete, dass offizielle Ubuntu-AMIs auf AWS nur mit /usr/bin/python3 :

ubuntu@ip-172-16-178-247:~$ uname -a
Linux ip-172-16-178-247 4.4.0-1065-aws #75-Ubuntu SMP Fri Aug 10 11:14:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
ubuntu@ip-172-16-178-247:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.5 LTS
Release:    16.04
Codename:   xenial
ubuntu@ip-172-16-178-247:~$ ls -al /usr/bin |grep python
lrwxrwxrwx  1 root   root          26 May 18  2016 dh_pypy -> ../share/dh-python/dh_pypy
lrwxrwxrwx  1 root   root          29 May 18  2016 dh_python3 -> ../share/dh-python/dh_python3
lrwxrwxrwx  1 root   root          23 Nov 28  2017 pdb3.5 -> ../lib/python3.5/pdb.py
lrwxrwxrwx  1 root   root          31 Mar 23  2016 py3versions -> ../share/python3/py3versions.py
lrwxrwxrwx  1 root   root          26 May 18  2016 pybuild -> ../share/dh-python/pybuild
lrwxrwxrwx  1 root   root           9 Mar 23  2016 python3 -> python3.5
-rwxr-xr-x  2 root   root     4464400 Nov 28  2017 python3.5
-rwxr-xr-x  2 root   root     4464400 Nov 28  2017 python3.5m
-rwxr-xr-x  1 root   root         976 Nov 27  2015 python3-jsondiff
-rwxr-xr-x  1 root   root        3662 Nov 27  2015 python3-jsonpatch
-rwxr-xr-x  1 root   root        1342 Oct 24  2015 python3-jsonpointer
lrwxrwxrwx  1 root   root          10 Mar 23  2016 python3m -> python3.5m

Für die Nachwelt ist dies eine bekannte Verbesserungsmöglichkeit für Ansible und wird für >=2.8 . in die Roadmap aufgenommen

In meinem Fall (ansible 2.7.0):
myIp | GESCHEITERT! => {
"geändert": falsch,
"module_stderr": "",
"module_stdout": "/bin/sh: /usr/bin/python: No such file or directory\r\n",
"msg": "MODULE FAILURE\nSiehe stdout/stderr für den genauen Fehler",
"rc": 127
}

$ll |grep python
lrwxrwxrwx 1 root root 32 5. Juni 15:44 kylinpy -> /usr/local/python2.7/bin/kylinpy
lrwxrwxrwx 1 root root 34 16. November 2016 python -> /usr/local/python2.7/bin/python2.7
lrwxrwxrwx 1 root root 6 Sep 8 2016 python2 -> python
-rwxr-xr-x 1 root root 4864 29. Mai 2014 python2.6
-rwxr-xr-x 1 root root 1418 29. Mai 2014 python2.6-config

Warum funktioniert Softlink auch nicht?

In meinem Fall (ansible 2.7.0):
myIp | GESCHEITERT! => {
"geändert": falsch,
"module_stderr": "",
"module_stdout": "/bin/sh: /usr/bin/python: No such file or directory\r\n",
"msg": "MODULE FAILURE\nSiehe stdout/stderr für den genauen Fehler",
"rc": 127
}

$ll |grep python
lrwxrwxrwx 1 root root 32 5. Juni 15:44 kylinpy -> /usr/local/python2.7/bin/kylinpy
lrwxrwxrwx 1 root root 34 16. November 2016 python -> /usr/local/python2.7/bin/python2.7
lrwxrwxrwx 1 root root 6 Sep 8 2016 python2 -> python
-rwxr-xr-x 1 root root 4864 29. Mai 2014 python2.6
-rwxr-xr-x 1 root root 1418 29. Mai 2014 python2.6-config

Warum funktioniert Softlink auch nicht?

Entschuldigung, es ist meine Schuld. Verwenden Sie Softlink, es funktioniert

ein einfaches: ln -s /usr/bin/python3 /usr/bin/python hat mein Problem gelöst

Verwenden Sie einfach ansible_python_interpreter=/usr/bin/python3 in Ihrer Inventardatei

Danke, es funktioniert jetzt

Dies scheint Probleme mit pyenv pyenv global <version> .

Es sollte es verschieben, aber ich vermute, dass Ansible hart codiert ist, um /usr/bin/python , anstatt nur den Befehl python ?

Wenn ja, wird sich das jemals ändern? Oder gibt es einen Workaround, den ich verwenden kann?

Wenn ja, wird sich das jemals ändern?

Nein ist es nicht.

Sie müssten ansible_python_interpreter explizit auf einen Python-Interpreter setzen, wenn Sie etwas anderes als /usr/bin/python möchten.

Was im Fall von pyenv wahrscheinlich nur der Pfad zum Shim ( which python3.6 ) oder zur echten Binärdatei ( pyenv which python3.6 ) wäre. Beachten Sie, dass Sie dies in vielen Fällen hart codieren müssen und die Shell-Erweiterung nicht verwenden können.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen