坚持调试运行远程命令的ansible任务冻结

时间:2017-04-21 05:12:47

标签: shell ansible

我正在设置Ansible角色来安装Ahsay Offsite Backup Server。

下载并解压缩包含该软件的压缩文件后,我需要运行安装脚本。我已经确定它是脚本中的早期步骤,它会检查您当前的用户是否具有无法运行的适当权限。

当我运行剧本时,最后的任务永远不会结束。

角色

- name: Check if OBS install files have already been downloaded
  stat:
    path: /tmp/obs/version.txt
  register: stat_result

- name: Ensures /tmp/obs exists
  file: path=/tmp/obs state=directory

- name: Download and extract OBS install files
  unarchive:
    src: https://ahsay-dn.ahsay.com/v6/obsr/62900/obsr-nix.tar.gz
    dest: /tmp/obs
    remote_src: true
    validate_certs: no
  when: stat_result.stat.exists == false

- name: Install OBS
  command: bash -lc "/tmp/obs/bin/install.sh > /tmp/install_output.log"

playbook配置适用于所有任务成为sudo。

如果我在远程主机上的shell中运行该命令,它将成功执行。

在命令失败之前我遇到了类似的问题,因为(在rvm的情况下)它需要bash_profile首先加载并引入一堆环境变量。正如我上面所做的那样修复,将命令包装在bash -lc "..."中,但这次没有帮助。

我很喜欢有关如何继续排除故障的建议。

1 个答案:

答案 0 :(得分:1)

  1. 在确保文件夹之前,您正在检查文件是否存在。
  2. 某些应用程序需要tty,如果没有,它们会问一些愚蠢的问题
  3. 在命令被“卡住”连接到违规机器时进行真正的调试,并尝试分析脚本的作用:查看其/proc/${PID}文件夹(如果您使用的是Linux),也可以连接到它通过strace -p ${PID}并可能重复它的stderr,看看它是否可以打印出对你有用的东西。
  4. 此外,您实际上不必运行command,可以使用shell模块,并指定其args以确保命令从特定文件夹运行,如下所示:

    - name: Install OBS
      shell: |
        ./bin/install.sh \
          1> /tmp/install.output.log \
          2> /tmp/install.error.log
      args:
        executable: /bin/bash
        chdir: /tmp/obs