- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是一名 Linux 新手,目前正在使用 Raspberry Pi 3 和 MotionEye 开发安全系统.为了通过电子邮件获得通知,我正在尝试创建一个自定义 shell 脚本,如果有运动,它将发送一封电子邮件,锁定 X 分钟,如果仍然有运动,则发送另一封电子邮件。但是,我遇到了一些困难。
我使用 SMTP 创建了一个名为“send_email.py”的简单 Python 脚本当我通过命令行执行它时,它非常适合发送电子邮件。
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
最佳答案
为什么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/
我改进了我的信号处理功能,但现在当我尝试通过 gcc ./test2.c -Wall -Wextra 编译我的程序时,我收到以下信息; ./test2.c: In function 'end_app'
对不起,我不能完全集中我的问题。 我正在尝试使用 flock 来避免同时运行脚本,如已接受的答案中所述: How to prevent a script from running simultaneo
此代码是在 pythonanywhere (linux) 上托管的 python 3.5。 我正在使用 with open 来管理一个非阻塞的 flock,但有时调度的进程会遇到异常,导致作业终止;没
我写了一个简单的代码来测试 flock(): int main (int argc, char * const argv[]) { int fd1; if (fd1 = open( "
以下代码在调用 file_get_contents 时触发文件不存在的错误,尽管这种情况很少发生,即使 file_exists 仅在上面的几个语句中被调用。 我认为在调用 file_exists 期间
If a process uses open(2) (or similar) to obtain more than one descriptor for the same file, these d
在我的 bash 脚本开始时,我运行 flock 以确保脚本不会同时运行两次。脚本的一部分是显示 xclock,但作为后台命令。所以我看到时钟并且脚本完成(时钟仍然明显显示)。但是当我想重新启动脚本时
我想同步对文件的访问。我正在使用 Linux 和 g++。 我想使用函数 flock() 锁定文件。我开发了 2 个测试应用程序写入和读取同一个文件。他们都使用 LOCK_SH 调用 flock()。
在这种情况下我需要帮助, 在处理请求时出于某种原因我需要写入文件,所以我使用 flock 来确保同一时间只有一个请求写入文件。 我的问题是当一个请求调用在被其他请求锁定期间蜂拥而至时会发生什么。是等到
折腾了PHP源码半个小时后,我放弃了。 :P 问题是 - PHP flock() 函数调用在 Gentoo Linux 系统上归结为什么系统调用?我遇到了一些问题(比如 block-for-30-se
我无法弄清楚为什么 flock() 在以下情况下无法正常运行。 以下代码被放入两个不同的 PHP 脚本中,一个是“test1.php”,另一个是“test2.php”。代码的要点是创建一个其他进程(正
我正在使用 flock() 函数通过获取临时文件的锁来检查脚本的另一个实例是否已经在运行,因此下一个实例应该检查文件是否未被锁定,否则它将停止
我正在测试从其他线程锁定文件描述符是否会影响主线程。 #include #include #include #include #include #include //#include #
在 Linux 的 bash 脚本中,我使用 flock [命令 flock,而不是系统调用 flock()] 来实现文件锁定,从而保护对共享资源 [这是 tmpfs 中的文件] 的并发访问。 我有陷
我的印象是flock(2)是线程安全的,我最近在代码中遇到了这样的情况,其中多个线程能够在同一个文件上获得锁,这些文件都与使用 c api flock 获取独占锁同步。进程25554是一个多线程应用程
想象以下 Perl 代码(此处为伪代码): successfully acquired flock for FILEHANDLER # line 1 some error or maybe
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界. 这篇CFSDN的博客文章PHP flock 文件锁详细介绍由作者收集整理,如果你对这篇文章有兴趣
使用 O_EXLOCK 标志调用 open() 与仅调用 open() 然后调用 有什么区别羊群()?后者具有潜在的竞争条件,但除此之外,两种方式都获得了对文件的独占进程锁,对吗? 最佳答案 唯一的区
大家好。我正在设置一个 cron 作业来执行 bash 脚本,我担心下一个可能会在前一个结束之前开始。稍微谷歌一下就会发现解决这个问题的一种流行方法是 flock 命令,使用方式如下: flock -
当我尝试通过 cron 作业执行 flock 时出现错误。 我正在执行 * * * * * /usr/bin/flock -n /usr/local/monitor/asdp_cloudwatch/r
我是一名优秀的程序员,十分优秀!