2017-11-21 3 views
0

우분투 16.04를 실행하는 VM을 사용하고 있으며 v2.4 및 apache2를 해당 버전에 설치했습니다. 나는웹 서버를 통해 anoper-playbook 호출

curl localhost/cgi-bin/ansible-call.py 

그러나 나는 다음과 같은 오류를 얻을 웹 서비스에 요청을 만들기 위해 컬 사용 그리고 특히 서브 프로세스 모듈을 사용하여 CGI 스크립트 'ansible_call.py',

import os 
import subprocess 


print 'Content-type:text/html /r/n/r/n' 

with open(os.devnull, 'w') as devnull: 
    result = subprocess.check_output(['/usr/bin/ansible- 
playbook','/vagrant/playbooks/sample.yml'], stderr=devnull) 

print result 

을 만들어

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> 
<html><head> 
<title>500 Internal Server Error</title> 
</head><body> 
<h1>Internal Server Error</h1> 
<p>The server encountered an internal error or 
misconfiguration and was unable to complete 
your request.</p> 
<p>Please contact the server administrator at 
[email protected] to inform them of the time this error occurred, 
and the actions you performed just before this error.</p> 
<p>More information about this error may be available 
in the server error log.</p> 
<hr> 
<address>Apache/2.4.18 (Ubuntu) Server at localhost Port 80</address> 
</body></html> 

나는 로그에보고 다음과 같은

[Tue Nov 21 17:34:50.192002 2017] [cgi:error] [pid 3142:tid 140333400639232] [client 127.0.0.1:37534] AH01215: subprocess.CalledProcessError: Command '['/usr/bin/ansible-playbook', '/vagrant/playbooks/sample.yml']' returned non-zero exit status 2: /usr/lib/cgi-bin/ansible-call.py 
발견

python 스크립트 자체가 정상적으로 실행됩니다. 종료 상태 2는 나에게 미스테리이며, 누구에게 아이디어가 있습니까?

답변

0

가능한 상태 코드에 대한 ansible "executable"을 검사하십시오 :

일부 발췌 :

except AnsibleOptionsError as e: 
     ... 
     exit_code = 5 
    except AnsibleParserError as e: 
     ... 
     exit_code = 4 
# TQM takes care of these, but leaving comment to reserve the exit codes 
# except AnsibleHostUnreachable as e: 
#  ... 
#  exit_code = 3 
# except AnsibleHostFailed as e: 
#  ... 
#  exit_code = 2 
    except AnsibleError as e: 
     ... 
     exit_code = 1 
    except KeyboardInterrupt: 
     ... 
     exit_code = 99 
    except Exception as e: 
     ... 
     exit_code = 250 

그래서 종료 코드 2는 실패 호스트를 가지고하는 것이 좋습니다. 당신은 프로세스 예외를 캐치 할 수 있습니다 :

try: 
     res = check_output(cmd) 
    except CalledProcessError as e: 
     print 'Error occurred: (Code {}) {}'.format(e.returncode, e.output) 
     res = None 
+0

가 지금은 makedirs에, MKDIR을 파일 "/usr/lib/python2.7/os.py"거부 권한의 오류, 라인 157을 얻을 수 (이름, 모드) OSError : [Errno 13] 사용 권한이 거부되었습니다. '~' 치명적 : [localhost] : FAILED! => { "실패": true, "msg": "모듈 실행 중 예기치 않은 오류가 발생했습니다.", "stdout": "" } –