我是Linux新手,目前正在使用Raspberry Pi 3和MotionEye开发安全系统。要通过电子邮件收到通知,我正在尝试创建一个自定义shell脚本,如果有动作,将发送电子邮件,锁定X分钟,然后如果仍有动作则发送另一封电子邮件。但是,我遇到了一些困难。
我创建了一个名为" send_email.py"的简单Python脚本。使用SMTP,当我通过命令行执行电子邮件时,它非常适用于发送电子邮件。
shell脚本(名为" flock_email.sh")是我在一些方面遇到麻烦的地方:
我尝试过不同的解决方案:
在 flock_email.sh 中,我试图直接将文件权限更改为只读,而不是使用 flock ,让它睡眠,然后更改权限返回以允许执行文件。
多个 flock_email.sh 实现,如附件所示。
总结:
我需要在锁定文件 flock_email.sh 之前执行 send_email.py 。
一旦锁定,它需要保持锁定X时间。
有没有人有任何指示或建议?我花了超过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
答案 0 :(得分:0)
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
,可以使用<
,但这意味着您每小时只需要一封电子邮件,不仅适用于每个用户,编程语言和脚本副本,而且每次点击保存时也是如此并用编辑器替换文件*
*编辑器在替换或覆盖文件方面有所不同