2017-04-21 98 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' –