一尘不染

添加文件后运行shell命令

linux

我的Linux机器上有一个名为images的文件夹。此文件夹已连接到网站,该网站的管理员可以向该网站添加图片。但是,添加图片后,我希望命令运行所有图片的目录大小。

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


阅读 206

收藏
2020-06-02

共1个答案

一尘不染

我不知道人们是如何将内容上传到此文件夹的,但是您可能想要使用比通过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"

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

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

2020-06-02