Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 无法调试运行冻结的远程命令的ansible任务_Shell_Ansible - Fatal编程技术网

Shell 无法调试运行冻结的远程命令的ansible任务

Shell 无法调试运行冻结的远程命令的ansible任务,shell,ansible,Shell,Ansible,我正在设置一个Ansible角色来安装Ahsay异地备份服务器 下载并解压缩包含该软件的压缩文件后,我需要运行安装脚本。我已经确定这是脚本中的一个早期步骤,它会检查当前用户是否具有无法运行的适当权限 当我运行剧本时,最后的任务永远不会完成 角色 playbook配置用于将所有任务变为sudo 如果我在远程主机上的shell中运行该命令,它将成功执行 我以前遇到过类似的问题,其中命令失败,因为在rvm的情况下,它需要bash_配置文件首先加载和拉入一组环境变量。修复方法与我前面所做的一样,将命令包

我正在设置一个Ansible角色来安装Ahsay异地备份服务器

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

当我运行剧本时,最后的任务永远不会完成

角色

playbook配置用于将所有任务变为sudo

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

我以前遇到过类似的问题,其中命令失败,因为在rvm的情况下,它需要bash_配置文件首先加载和拉入一组环境变量。修复方法与我前面所做的一样,将命令包装为bash-lc…,但这一次没有帮助

我想知道如何继续解决这个问题

您正在检查文件是否存在,然后再确认文件夹是否存在。 有些应用程序需要tty,当不在tty上时,它们会问一些愚蠢的问题 要在命令被卡住时进行真正的调试,请连接到有问题的机器,并尝试分析脚本的作用:如果您在linux上,请查看其/proc/${PID}文件夹,或者通过strace-p${PID}连接到它,或者复制它的stderr,以查看它是否打印出对您有意义的内容。 另外,您实际上不必运行命令,您可以使用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

检查install_output.log,确定是哪一行导致脚本停止,使用推理来确定根本原因。这就是我如何确定是该部分检查单独脚本中的特权的。我设置了一个测试任务,它只运行那个单独的脚本,它也冻结了,所以我知道失败的是它。我还通过管道将该脚本的输出传输到一个日志文件,然后再次运行该playbook,当创建日志文件时,其内容是空的,因此我被困在那里。使用-x运行bash或添加您自己的日志记录。此外,我不确定您是否必须使用bash来完成所有这些操作,请查看install.sh的顶部,也许它需要一个不同的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