添加文件时运行shell命令

Cri*_*pto 11 linux bash shell cron

我的linux盒子上有一个名为images的文件夹.此文件夹已连接到网站,网站管理员可以将图片添加到此网站.但是,当添加图片时,我想要一个命令来运行调整目录中所有图片的大小.

简而言之,我想知道在将新文件添加到特定位置时,如何使服务器运行特定命令.

gho*_*oti 23

我不知道人们如何将内容上传到此文件夹,但您可能希望使用比使用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"
Run Code Online (Sandbox Code Playgroud)

UPLOAD仅当vsftpd成功保存文件时才会添加该行.您可以在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
Run Code Online (Sandbox Code Playgroud)

如果您使用的是HTTP上传工具,请查看该工具是否具有用于记录传入文件的文本日志文件.如果它不考虑添加某种记录器功能,那么它将生成你可以的日志tail.