2016-08-08 1 views
0

Я пишу mail.py (используя webpy), чтобы отправить мне ip-адрес каждой машины.преуспеть в скрипте, но сбой в 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

Я изменил web.config.smtp_server с IP-адресом вместо имени domain_name, и он сработал. Я думаю, что ошибка связана с тем, что некоторые конфигурации и службы недоступны в процессе 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% 20receiving% 20any% 20notification% 20messages% 20from% 20Mail) [неизвестный сервис] (http://stackoverflow.com/questions/23777121/why-am-i-getting-socket- gaierror-errno-2-from-python-httplib) – makeapp

+0

[трюки для отладки rc.local] (http://stackoverflow.com/questions/7783341/run-script-with-rc-local-script-works-but- не-на-ботинок) – makeapp

ответ

1

Это может случиться, потому что PATH отличается, когда rc.local работает. В частности, web.sendmail может ожидать найти sendmail на пути, но его пока нет. См. Документы here.

Пути могут быть специфичными для вашей системы. Чтобы отладить это, вы могли бы сбрасывать вещи изнутри rc.local в файл, например /tmp/rc.local.log, и проверять его при завершении работы системы: например, env >>/tmp/rc.local.log.

Примечание. Если во время запуска установлено несколько накопителей, накопитель, содержащий sendmail, еще не установлен в этой точке. Это боль, с которой приходится иметь дело. Чтобы дважды проверить, добавьте mount >>/tmp/rc.local.log.

Смежные вопросы