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

succeed in script but fail in rc.local

我写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] 名称或服务未知。

我对这个输出感到困惑。

这可能是因为 PATHrc.local 运行时不同。具体来说,web.sendmail 可能希望在路径中找到 sendmail,但目前还没有。请参阅文档 here.

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

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