在脚本中成功但在rc.local中失败

时间:2016-08-08 12:03:41

标签: python bash ubuntu rc

我写mail.py(使用webpy)向我发送每台机器的IP地址。

#!/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 "-----------------------------------------------------------"

我可以收到电子邮件' python mail.py'。但是当我把它放在rc.local中时,我无法收到电子邮件,在deploy.log输出中的消息 [Errno -2]名称或服务未知。

我对这个输出感到困惑。

1 个答案:

答案 0 :(得分:1)

这可能发生,因为PATHrc.local运行时有所不同。具体来说,web.sendmail可能会在路径中找到sendmail,但它还没有。请参阅文档here

路径可能特定于您的系统。要对此进行调试,您可以将rc.local内的内容转储到/tmp/rc.local.log等文件中,并在系统启动时进行检查:例如,env >>/tmp/rc.local.log

请注意,如果在启动期间安装了多个驱动器,则此时可能尚未安装包含sendmail的驱动器。这是一个痛苦的处理。要仔细检查,请添加mount >>/tmp/rc.local.log