来自数千个文件的 JPG 滑动窗口

来自数千个文件的 JPG 滑动窗口

我的机器配有一个摄像头,每天可以拍摄数千张 jpg 文件。我正在寻找一种通过云存储站点(例如box.com.

我认为每分钟将最后 5 分钟的文件复制到已安装的远程驱动器 (davfs2),然后每 10 分钟删除超过一小时的文件将是一个很好的解决方案;但这却引发了大问题!导致我的机器无法通过SSH连接;因此要求我将其关闭。

现在,即使我尝试删除这些文件,它仍然会将它们重新复制到已安装的驱动器中。我不得不卸载驱动器,但似乎无法清除 davfs2 缓存。

我的方法有根本问题吗?

我把它放在我的 crontab 中:

*/1 * * * * sudo find /mnt/ -type f -cmin -5 -exec cp -pn '{}' /home/pi/box/street_pictures/ \;
*/10 * * * *  sudo find /home/pi/box/street_pictures -cmin +60 -type f -exec rm '{}' \;

/nmt是包含数千张图片的文件夹。 /home/pi/box/street_pictures是我安装的驱动器。

答案1

为什么sudo?如果无论如何它都以 root 身份运行,请将其放入 root crontab 中?

扫描包含数千个文件的(远程)目录可能需要很长时间。如果花费的时间超过一分钟,则可能会同时运行多个 cron 作业,相互争夺资源,并且许多远程文件系统无法很好地处理并发访问。

为了避免并发 cron 作业,您可以使用某种锁定机制,或者因为它会不停地运行,所以您可以将其放在服务脚本中:

while [ 1 ]
do
    sleep 60 &
    cp jpg stuff
    wait # for sleep in case 60 seconds have not yet passed
done

也许您可以将已复制的文件重命名到忽略的子目录?

-exec {} \;也不是很有效(cp为每个文件启动一个新进程)。-exec cp --target-directory=/home/pi/... {} +如果您的程序支持这样的选项,请尝试改为。

如果文件名以任何方式可预测(包含日期或递增数字),则依赖它们而不是它们的时间戳可能更有效,以避免不必要/耗时的stat()文件属性。

相关内容