我有一個Ansible劇本,其中有像一個任務:運行bash命令時nohup和有什麼區別?
- name: start the apache server
command: ./server.sh start chdir="/myapp"
,並在server.sh
:
#!/bin/bash
server_wrapper.py start
在server_wrapper.py
:
#!/usr/bin/python
import threading
import subprocess
cmd = "$APATCH_HOME/scripts/service.sh restart"
print cmd
ret = subprocess.call(cmd, shell=True)
if ret !=0
logging.critical("error happend, %d" % ret)
這種隨機失敗。當我手動ssh到Ansible playbook目標所在的遠程服務器時,我可以通過運行$APACHE_HOME/scripts/service.sh restart
來看到,apache可以成功運行,並且它會向控制檯輸出一些日誌記錄,例如Apache started successfully
,看起來像標準輸出。
但從Ansible劇本運行時,它隨機失敗,我必須改變server.sh
以下列方式:
#!/bin/bash
nohup server_wrapper.py start &
似乎nohup的和&運營商有固定的問題。
所以我想知道爲什麼&運營商解決我的問題,我的理解&將啓動一個子shell,並在後臺運行,它是與標準I/O,這引起了問題相關的東西嗎?