2017-04-21 93 views
0

我正在设置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" 

的剧本配置是所有任务成为须藤。

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

我在命令失败之前遇到类似的问题,因为(在rvm中)它需要首先加载并拉入一堆环境变量的bash_profile。解决方法就像我上面所做的那样,将命令封装在bash -lc "..."中,但这一次没有帮助。

我想如何继续解决这一问题的任何建议。

+0

检查' install_output.log',确定哪一行导致脚本停止,使用推理来确定根本原因。 – techraf

+0

这就是我确定它是检查在单独脚本中的权限的部分。我设置了一个测试任务,它只运行了单独的脚本,并且它也冻结了,所以我知道这是失败的。我还将该脚本的输出传送到日志文件并再次运行该剧本,并且在创建日志文件时,其内容是空的,所以我卡在那里。 – bdx

+0

用'-x'运行bash或添加自己的日志记录。 – techraf

回答

1
  1. 您在确保文件夹之前检查文件存在。
  2. 有些应用需要TTY,而当不上了,他们问一些愚蠢的问题
  3. 真正调试,而命令是“卡住”连接到有问题的机器,并尝试分析是什么剧本都:看在其/proc/${PID}文件夹(如果你在linux上),也许通过strace -p ${PID}连接到它,也许重复它的stderr看它也许打印一些对你有意义的东西。

而且,你真的没有运行command,您可以使用shell模块,并指定其参数传递给确保运行命令从特定的文件夹,例如:

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

另外,我不确定你必须使用bash来处理所有这些,看看install.sh的顶部,也许它需要一个不同的shell。像'sh' –