我是一个Linux新手,目前正在开发一个使用Raspberry 3和MotionEye的安全系统。为了通过电子邮件获得通知,我尝试创建一个自定义shell脚本,如果有运动,将发送电子邮件,锁定X分钟,然后发送另一个电子邮件,如果仍然有动议。不过,我遇到了一些困难。
我使用send_email.py创建了一个名为“SMTP”的简单Python脚本,当我通过命令行执行它时,它可以很好地发送电子邮件。
shell脚本(名为"flock_email.sh")是我在几个方面遇到麻烦的地方:
我尝试过的不同解决方案:
概括地说:
有人有什么建议或建议吗?我已经花了15个多小时来修补这个问题,我觉得自己什么也没有得到!
send_email.py
#!/usr/bin/env
import smtplib
def send_email():
content = "Message I want to send to specified e-mail."
sender = "e-mail account that will send message"
pword = "password of sender"
receiver = "e-mail account that will receive message"
mail = smtplib.SMTP("smtp.gmail.com",587)
mail.ehlo
mail.starttls()
mail.login(sender,pword)
mail.sendmail(sender,receiver,content)
mail.close()
send_email()flock_email.sh (1):
#!/bin/bash
(
python /home/pi/send_email.py
flock -e 200
sleep [time in seconds]
)flock_email.sh (2):
#!/bin/bash
(
python /home/pi/send_email.py
exec 3>/home/pi/send_email.py
flock -x 3
sleep [time in seconds]
exec 3>&-
)flock_email.sh (3):
#!/bin/bash
python /home/pi/send_email.py
chmod 444 /home/pi/send_email.py # modify to read only for all
sleep [time in seconds]
chmod 755 /home/pi/send_email.py # modify to rwx for owner, r-x for others发布于 2017-05-19 20:29:27
man flock和所有帖子之所以说要使用>,是因为您应该使用一个专用的锁文件,通常在/var/lock中
#!/bin/bash
exec 3> /var/lock/motionmail
flock -ne 3 || exit
python /home/pi/send_email.py
sleep 3600此外,在您检查锁之前,这还可以修复您发送电子邮件的问题,并中止新的电子邮件,而不是将它们全部排队。
您根据希望您的锁具有的作用域选择锁文件名:
/var/lock/motionmail的东西,因为每个系统只有一封。$HOME/.motionmail.lock,因为每个用户只有一封。您可以在/home/pi/send_email.py中使用<,但这意味着您不仅希望每个用户、编程语言和脚本副本每小时发送一封电子邮件,而且还希望每次使用编辑器*保存和替换文件时都要使用<。
*编辑者在替换或覆盖文件方面存在差异
https://stackoverflow.com/questions/44076742
复制相似问题