找不到Ansible里面的脚本命令

时间:2017-11-17 17:29:26

标签: linux bash shell ansible devops

Ansible:

-   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

脚本文件:

#!/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;

当我尝试在远程计算机上运行pm2命令时,它正在运行。但是,不是从ansible脚本文件运行。

错误:

  

致命:[网络服务器]:失败了! => {“changed”:true,“failed”:true,“msg”:“非归零码”,“rc”:1,“stderr”:“与xx.xx.xx.xx的共享连接已关闭。\ r \ n \ n“,”stdout“:”/ home /ronak / .ansible / tmp / ansible-tmp-1510939424.06-225768915266978 / pm2.sh:第11行:pm2:命令未找到\ 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 个答案:

答案 0 :(得分:1)

您正在覆盖脚本中的PATH环境变量。这用于确定可执行文件的位置(请参阅https://en.wikipedia.org/wiki/PATH_(variable))。

简短回答是在脚本中为PATH使用不同的名称,并在脚本中使用命令的绝对路径。