我有我的Linux操作系统中的文件夹命名的图像。 此文件夹连接到一个网站,该网站的管理员有权图片添加到这个网站的能力。 然而,当添加图片,我想一个命令来运行所有的图片调整目录。
总之,我想知道我怎样才能使服务器运行特定的命令时,一个新的文件添加到特定位置。
我有我的Linux操作系统中的文件夹命名的图像。 此文件夹连接到一个网站,该网站的管理员有权图片添加到这个网站的能力。 然而,当添加图片,我想一个命令来运行所有的图片调整目录。
总之,我想知道我怎样才能使服务器运行特定的命令时,一个新的文件添加到特定位置。
我不知道人们是如何将内容上传到该文件夹,但你可能想使用一些低技术含量比的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
。
像约翰评论的inotify
API是一个起点,但您可能会感兴趣的一些工具,利用这个API来执行文件通知的任务:
例如incron其可以用于在检测到的文件或目录的变化时运行的cron样的任务。
或者inotify工具这是一组,你可以用它来建立自己的文件通知shell脚本的命令行工具。
如果你看一下维基帕科对inotify工具的底部,你会看到引用了更多的工具和高级语言如Python,Perl或支持的Ruby ( 示例代码 )。
你可能想看看inotify
inotify的API提供了用于监控文件系统事件的机制。 inotify的可用于监视单个文件,或监视目录。 当被监控的目录时,inotify才将返回事件目录本身,并为目录中的文件。
使用ghotis工作
以下是我做得到的用户可用空间:
#!/bin/bash
tail -F -n 1 /var/log/vsftpd.log | while read line; do
if echo "$line" | grep -q 'OK LOGIN:'; then
pid=$(sed 's/.*\[\([^]]*\)\].*/\1/g' <<< "$line")
#the operator '<<<' doesnt exist in dash so use bash
if [[ $pid != *"pid"* ]]; then
echo -e "Disk 1: Contains Games:\n" > /home/vftp/"$pid"/FreeSpace.txt; df -h /media/Disk1/ >> /home/vftp/"$pid"/FreeSpace.txt
echo -e "\r\n\r\nIn order to read this properly you need to use a text editor that can read *nix format files" >> /home/vftp/"$pid"/FreeSpace.txt
fi
echo "checked"
# awk '{ sub("\r$", ""); print }' /home/vftp/"$pid"/FreeSpace.txt > /home/vftp/"$pid"/FreeSpace.txt
fi
done
如果该文件是通过HTTP上传补充说,如果你的服务器是Apache的,你可能要检查的mod_security。
它使您能够运行为通过HTTP POST尽一切上传的脚本。
#!/bin/bash
tail -F -n0 /var/log/vsftpd.log | while read line; do
if echo "$line" | grep -q 'OK UPLOAD:'; then
filename=$(echo $line | cut -d, -f2 |awk '{print $1}')
filename="${filename%\"}"
filename="${filename#\"}"
#sleep 1s
if [ -s $filename ]; then
# do something with $filename
echo $filename
fi
fi
done