2017-11-17 3 views
-2

ansible gefunden:innerhalb Skript ansible Befehl nicht

- name: Node package manager 
    npm: 
     name: pm2 
     global: yes 
    notify: 
     - restart nginx 

- name: start the app 
    script: ../files/common/pm2.sh app_name {{ user }} 
    tags: test 

Script-Datei:

#!/bin/bash 
APP_NAME=$1 
USER=$2 

if [ "$USER" != "" ]; then 
    PATH="/home/$USER/" 
else 
    PATH="/var/www/" 
fi 

pm2 describe ${APP_NAME} > /dev/null  # line no 11 
RUNNING=$? 

if [ "${RUNNING}" -ne 0 ]; then 
    cd ${PATH}${APP_NAME}/ && pm2 start npm --name "${APP_NAME}" -- start 
else 
    pm2 restart ${APP_NAME} 
fi; 

Als ich versuchte, pm2 Befehl auf dem entfernten Rechner zu laufen, es funktioniert. Aber nicht von ansible Skriptdatei ausgeführt.

Fehler:

fatal: [webserver]: FAILED! => {"changed": true, "failed": true, "msg": "non-zero return code", "rc": 1, "stderr": "Shared connection to xx.xx.xx.xx closed.\r\n", "stdout": "/home/ronak/.ansible/tmp/ansible-tmp-1510939424.06-225768915266978/pm2.sh: line 11: pm2: command not found\r\n127\r\n", "stdout_lines": ["/home/ronak/.ansible/tmp/ansible-tmp-1510939424.06-225768915266978/pm2.sh: line 11: pm2: command not found", "127"]}

+1

Bitte werfen Sie einen Blick auf: http://www.shellcheck.net/ – Cyrus

Antwort

1

Sie überschreiben die PATH Umgebungsvariable in Ihrem Skript. Dies wird verwendet, um festzustellen, wo sich die ausführbaren Dateien befinden (siehe https://en.wikipedia.org/wiki/PATH_(variable)).

Kurze Antwort ist, verwenden Sie einen anderen Namen für PATH in Ihrem Skript und verwenden Sie absolute Pfade für Befehle in Ihrem Skript.

Verwandte Themen