在脚本中成功但在 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] 名称或服务未知。
我对这个输出感到困惑。
这可能是因为 PATH
在 rc.local
运行时不同。具体来说,web.sendmail
可能希望在路径中找到 sendmail
,但目前还没有。请参阅文档 here.
这些路径可能特定于您的系统。要调试它,您可以将 rc.local
内部的内容转储到 /tmp/rc.local.log
等文件,并在系统启动时检查它:例如 env >>/tmp/rc.local.log
.
请注意,如果您在启动期间安装了多个驱动器,则包含 sendmail
的驱动器此时可能尚未安装。这是一个痛苦的处理。要仔细检查,请添加 mount >>/tmp/rc.local.log
.
我写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] 名称或服务未知。
我对这个输出感到困惑。
这可能是因为 PATH
在 rc.local
运行时不同。具体来说,web.sendmail
可能希望在路径中找到 sendmail
,但目前还没有。请参阅文档 here.
这些路径可能特定于您的系统。要调试它,您可以将 rc.local
内部的内容转储到 /tmp/rc.local.log
等文件,并在系统启动时检查它:例如 env >>/tmp/rc.local.log
.
请注意,如果您在启动期间安装了多个驱动器,则包含 sendmail
的驱动器此时可能尚未安装。这是一个痛苦的处理。要仔细检查,请添加 mount >>/tmp/rc.local.log
.