我的linux机器上有一个名为images的文件夹。此文件夹已连接到网站,并且该网站的管理员能够将图片添加到此网站。但是,当添加图片时,我想运行一个命令来调整目录中所有图片的大小。
简而言之,我想知道如何在将新文件添加到特定位置时让服务器运行特定命令。
发布于 2012-06-09 11:27:10
我不知道人们是如何将内容上传到此文件夹的,但您可能希望使用比使用inotify监视目录更低的技术。
如果协议是FTP,且您可以访问FTP服务器的日志,我建议跟踪该日志以查看是否成功上载。这种由事件触发的方法比使用传统cron的轮询方法更快、更可靠、负载更少,而且比使用inotify的方法更易于移植和调试。
您处理此问题的方式当然取决于您的FTP服务器。我有一个正在运行的vsftpd,它的日志中包含这样的行:
Fri May 25 07:36:02 2012 [pid 94378] [joe] OK LOGIN: Client "10.8.7.16"
Fri May 25 07:36:12 2012 [pid 94380] [joe] OK UPLOAD: Client "10.8.7.16", "/path/to/file.zip", 8395136 bytes, 845.75Kbyte/sec
Fri May 25 07:36:12 2012 [pid 94380] [joe] OK CHMOD: Client "10.8.7.16", "/path/to/file.zip 644"只有当vsftpd成功保存文件时,才会添加UPLOAD行。您可以在shell脚本中解析它,如下所示:
#!/bin/sh
tail -F /var/log/vsftpd.log | while read line; do
if echo "$line" | grep -q 'OK UPLOAD:'; then
filename=$(echo "$line" | cut -d, -f2)
if [ -s "$filename" ]; then
# do something with $filename
fi
fi
done如果您使用的是HTTP上传工具,请查看该工具是否有用于记录传入文件的文本日志文件。如果它不考虑添加某种类型的记录器函数,那么它将生成您可以tail的日志。
发布于 2012-06-09 10:05:13
就像John评论的那样,inotify API是一个起点,但是您可能会对使用此API执行文件通知任务的一些工具感兴趣:
例如,,它可用于在检测到文件或目录更改时运行类似cron的任务。
或者,这是一组命令行工具,可以用来构建您自己的文件通知shell脚本。
如果你在Wiki pake的底部查看inotify工具,你会看到对更多工具的引用,并支持更高级的语言,如Python、Perl或Ruby (example code)。
发布于 2012-06-09 06:23:59
您可能想看看inotify
inotify API提供了一种监视文件系统事件的机制。Inotify可用于监视单个文件或监视目录。当一个目录被监视时,inotify将返回该目录本身以及该目录中的文件的事件。
https://stackoverflow.com/questions/10956668
复制相似问题