docker ubuntu 文件同步_Docker Linux如何检测目录(或文件)变化来执行给定命令

在此以PHP容器为例,当网站上传文件时,同步文件到云存储。

同步的方法很多,直接写在PHP网站代码中,或者用本章所讲的内容,利用Linux来侦测目录及目录下文件的变化,来异步实现文件同步。

首先,在Dockerfile或者容器中安装inotify:

apt-get install inotify-tools

然后,编写Bash脚本,并运行:

#############################################

# 在使用本脚本之前,请在环境变量中设置有事件发生

# 时执行的PHP脚本,如:

# export INOTIFY_PHP_FILES=/var/www/html/awaimai.com/utils/oss.php

# 然后再执行本脚本:

# /bin/bash inotify.sh

# 一旦配置的 DIR 目录发生变化,便会执行该PHP脚本,同时也传送信息到PHP脚本

#############################################

DIR="/var/www/html" # 检测该目录下的文件动态,多个以空格隔开

EVENTS="create,close_write" # 仅目录和文件创建

FORMAT="%e %w%f" # 输出内容格式为:事件 完整目录

OPTIONS="--recursive --monitor --excludei .*/tmp/.*" # 递归侦测子目录,循环侦测,忽略包含/tmp/的路径

echo "=================="

echo "Inotify directory :$DIR"

echo "Inotify events :$EVENTS"

echo "Inotify format :$FORMAT"

echo "Inotify options :$OPTIONS"

echo "Inotify php file(s) :$INOTIFY_PHP_FILES"

inotifywait ${OPTIONS} --format "${FORMAT}" -e "${EVENTS}" "${DIR}" | \

while read -r notifies; # 侦测结果放入notifies变量

do

echo "$notifies";

FILES=(${INOTIFY_PHP_FILES//,/ }) # 将PHP文件集以逗号分隔成数组

for FILE in ${FILES[@]}

do

echo "===== Execute file ${FILE} =====\n"

php ${FILE} $notifies; # 调用PHP文件

done

done

实列 oss.php 文件:

echo '===== We are in the PHP file =====' . PHP_EOL;

$newFile = getFilePath();

echo "Detecting new file $newFile" . PHP_EOL;

function getFilePath()

{

global $argv;

if (!$argv || count($argv ) < 3) {

print_r($argv);

exit('Params from command line is invalid.');

}

$action = $argv[1];

$path = $argv[2];

if ($action !== 'CLOSE_WRITE,CLOSE') {

exit('Ignore this action, we just monitor new file.');

}

return $path;

}

参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值