2016-08-08 7 views
0

각 컴퓨터의 IP 주소를 보내려면 mail.py (webpy 사용)이라고 적습니다.는 스크립트에서는 성공했지만 rc.local에서는 실패합니다.

#!/usr/bin/env python 
#coding=utf-8 

import web 
def send_mail(send_to, subject, body, cc=None, bcc=None): 
    try: 
     web.config.smtp_server = 'xxxxx' 
     web.config.smtp_port = 25  
     web.config.smtp_username = 'xxx' 
     web.config.smtp_password = 'xxx' 
     web.config.smtp_starttls = True 
     send_from = 'xxx'  

     web.sendmail(send_from, send_to, subject, body, cc=cc, bcc=bcc) 
     return 1 #pass 
    except Exception, e: 
     print e 
     return -1 #fail 
if __name__=='__main__': 
    print "in mail.py" 
    f=file('/home/spark/Desktop/ip.log') 
    f1=f.read() 
    f.close() 
    send_to = ['xxxx']   
    subject = 'xxxx' 
    body = 'ip:',f1 
    send_mail(send_to, subject, body) 

rc.local에

bash deploy.sh & 
exit 0 

deploy.sh

#!/usr/bin/env 
cd /home/spark/Desktop 
python mail.py >>deploy.log 
echo "-----------------------------------------------------------" 

내가 '파이썬 mail.py'.But을 할 경우 내가 rc.local 파일에 넣을 때 이메일을받을 수 있습니다 , 전자 메일, deploy.log 출력의 메시지를받을 수 없습니다. [Errno -2] 이름 또는 서비스를 알 수 없습니다.

나는이 출력에 당황 스럽다.

+0

도메인 이름 대신 ip 주소로 web.config.smtp_server가 변경되어 작동했습니다. rc.local 프로세스 중에는 일부 구성 및 서비스를 사용할 수 없으므로 오류라고 생각합니다. 유용한 링크는 [sendmail] (https://wiki.list.org/DOC/Mail%20delivery%20fails%20with%20%22 (-2, % 20'Name % 20or % 20service % 20not % 20known ') % 22입니다. , % 20aka % 20I % 20am % 20not % 20 수신 % 20any % 20notification % 20messages % 20from % 20Mail) [알 수없는 서비스] (http://stackoverflow.com/questions/23777121/why-am-i-getting-socket- gaierror-errno-2-python-httplib) – makeapp

+0

[트릭을 디버그 rc.local] (http://stackoverflow.com/questions/7783341/run-script-with-rc-local-script-works-but- 부팅시 사용하지 않음) – makeapp

답변

1

rc.local을 실행하면 PATH이 달라질 수 있습니다. 특히 web.sendmail은 경로에서 sendmail을 찾을 것으로 예상 할 수 있지만 아직 없습니다. docs here을 참조하십시오.

경로는 시스템에 따라 다를 수 있습니다. 이를 디버깅하려면 rc.local 내부의 내용을 /tmp/rc.local.log과 같은 파일로 덤프하고 시스템이 가동 될 때 검사하십시오 (예 : env >>/tmp/rc.local.log).

시작 중에 여러 드라이브가 마운트되어있는 경우 sendmail이있는 드라이브는 아직 설치되지 않았을 수 있습니다. 이것은 대처할 고통입니다. 다시 확인하려면 mount >>/tmp/rc.local.log을 추가하십시오.