gpt4 book ai didi

linux - 使用 flock 锁定文件 X 时间

转载 作者:太空宇宙 更新时间:2023-11-04 12:28:02 27 4
gpt4 key购买 nike

我是一名 Linux 新手,目前正在使用 Raspberry Pi 3 和 MotionEye 开发安全系统.为了通过电子邮件获得通知,我正在尝试创建一个自定义 shell 脚本,如果有运动,它将发送一封电子邮件,锁定 X 分钟,如果仍然有运动,则发送另一封电子邮件。但是,我遇到了一些困难。

我使用 SMTP 创建了一个名为“send_email.py”的简单 Python 脚本当我通过命令行执行它时,它非常适合发送电子邮件。

shell 脚本(名为“flock_email.sh”)是我在几个方面遇到麻烦的地方:

  1. 每当我运行 flock_email.sh 时,它都会完全覆盖 send_email.py。我已尝试更改文件权限,使其只能由用户执行,但它仍然会被覆盖。
  2. flock 命令/功能无法按我的预期运行或根本无法运行。我浏览了整个互联网并尝试了多种不同的代码,但没有一个有效。我附上了我尝试过的各种 flock_email.sh 脚本。
  3. 不一定是个问题,但我对我的“shebang”行应该是什么感到有点困惑。对于 flock_email.sh,我将其命名为“!#/bin/bash”,我相信这使脚本可执行,至少根据 this .我还需要通过命令“chmod +x flock_email.sh”更改权限吗?路径是/home/pi,这基本上是我的 Pi 的主目录。

我尝试过的不同解决方案:

  1. flock_email.sh 中,我试图直接将文件权限更改为只读,而不是使用 flock,让它休眠,然后更改恢复权限以允许执行文件。

  2. 多个 flock_email.sh 实现,如附件所示。

总结:

  1. 我需要在锁定文件 flock_email.sh 之前执行 send_email.py

  2. 一旦锁定,它需要保持锁定 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

最佳答案

为什么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如果你想要 < ,但这意味着您不仅要为每个用户、编程语言和脚本副本每小时发送一封电子邮件,而且还要在每次点击保存并用编辑器替换文件时发送电子邮件*


* 编辑器在替换还是覆盖文件方面有所不同

关于linux - 使用 flock 锁定文件 X 时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44076742/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com