监测文件变动同步到阿里云OSS
0. 安装阿里云的ossutil64
注意看说明,按照指导一步一步来,要配置密钥等
1. 安装 inotify-tools
在 Debian 系统上,你可以使用以下命令来安装 inotify-tools:
sudo apt update
sudo apt install inotify-tools
2. 创建一个 Shell 脚本
输入 cd /usr/local/bin
来改变到那个目录。
使用文本编辑器创建脚本。例如,sudo nano sync-oss.sh
。
请记得,根据你保存脚本的位置,你可能需要不同的权限来创建或修改文件。例如,在 /usr/local/bin 下通常需要管理员权限,所以你可能需要使用 sudo。
在 nano 文本编辑器中,你可以通过以下步骤来保存文件:
按下 Ctrl + O 组合键。这会打开一个底部提示行,询问你要保存文件到哪个位置。
如果你想要保存到当前文件名,直接按 Enter 键。如果你想另存为其他文件名,可以在这时候输入新的文件名,然后按 Enter。
保存完成后,你会再次看到编辑界面,表明文件已成功保存。
请注意,保存文件通常需要相应的权限。如果你正在编辑一个需要管理员权限的文件,你应该使用 sudo nano 文件名 来打开 nano。
创建一个新的 shell 脚本文件(例如 sync-oss.sh),并添加以下内容:
#!/bin/bash
DIRECTORY_TO_WATCH="/www/wwwroot/jre.info/wp-content/uploads/2023/09"
SYNC_COMMAND="/usr/bin/ossutil64 sync /www/wwwroot/jre.info/wp-content/uploads/2023/09/ oss://jre-sh/wp-content/uploads/2023/09/ --delete -u -f"
while true; do
inotifywait -r -e modify,create,delete,move $DIRECTORY_TO_WATCH
$SYNC_COMMAND
在这个脚本中:
DIRECTORY_TO_WATCH
是你要监视的目录。
SYNC_COMMAND
是你要在检测到变化时执行的命令。
inotifywait
命令用于监视目录中的变化,当检测到 modify、create、delete 或 move 事件时,它会退出并执行同步命令。-r
选项使其递归监视目录中的所有子目录。
监测多个文件
#!/bin/bash
# 定义一个函数来执行监控和同步
function watch_and_sync() {
DIRECTORY_TO_WATCH=$1
SYNC_COMMAND=$2
while true; do
inotifywait -r -e modify,create,delete,move $DIRECTORY_TO_WATCH
$SYNC_COMMAND
done
}
# 监测第一个目录并同步
watch_and_sync "/www/wwwroot/jre.info/wp-content/uploads/2023/09/" "/usr/bin/ossutil64 sync /www/wwwroot/jre.info/wp-content/uploads/2023/09/ oss://jre-sh/wp-content/uploads/2023/09/ --delete -u -f" &
# 监测第二个目录并同步
watch_and_sync "/www/wwwroot/jre.info/wp-content/uploads/2023/10/" "/usr/bin/ossutil64 sync /www/wwwroot/jre.info/wp-content/uploads/2023/10/ oss://jre-sh/wp-content/uploads/2023/10/ --delete -u -f" &
# 监测第三个目录并同步
watch_and_sync "/www/wwwroot/jre.info/wp-content/themes/jreinfo/assets/" "/usr/bin/ossutil64 sync /www/wwwroot/jre.info/wp-content/themes/jreinfo/assets/ oss://jre-sh/wp-content/themes/jreinfo/assets/ --delete -u -f" &
# 等待所有后台进程完成
wait
这里我使用了 Bash 的函数 watch_and_sync
以及 &
符号来在后台运行函数。这样,你的脚本将会并发地运行这三个 watch_and_sync 实例,每一个都在监控不同的目录并执行不同的同步命令。
注意,我在每个 watch_and_sync 调用的末尾都添加了 & 符号,这是 Bash 中将进程放到后台执行的方式。最后的 wait
命令则会等待所有后台任务完成(尽管在这个特定的例子里,由于有 while true 循环,它们理论上不会自行结束)。
3. 使脚本可执行
保存文件并使其可执行,使用以下命令:
chmod +x sync-oss.sh
4. 运行脚本
你可以通过运行以下命令来手动启动脚本:
./sync-oss.sh
这将使脚本始终保持运行状态,并在检测到 uploads 目录中的任何更改时运行同步命令。
5. 设置为系统服务
为了确保脚本在系统启动时自动运行,并在出现问题时自动重新启动,你可以创建一个 systemd 服务来管理它。
5.1 创建 systemd 服务文件
创建一个新的 systemd 服务文件,例如 /etc/systemd/system/sync-oss.service
,并添加以下内容:
输入 sudo nano /etc/systemd/system/sync-oss.service
。
[Unit]
Description=Sync OSS on File Changes
[Service]
ExecStart=/usr/local/bin/sync-oss.sh
Restart=always
RestartSec=3
User=root
Group=root
[Install]
WantedBy=multi-user.target
在这个文件中:
替换 /path/to/your/sync-oss.sh 为你的 sync-oss.sh 脚本的完整路径。替换 your-username 和 your-groupname 为你的用户名和用户组名。
5.2 重新加载 systemd
保存你的服务文件后,你需要运行以下命令来告诉 systemd 有一个新的服务:
sudo systemctl daemon-reload
5.3 启动服务
现在你可以使用以下命令启动你的服务:
sudo systemctl start sync-oss.service
5.4 启用自动启动
要使你的服务在系统启动时自动启动,你可以运行:
sudo systemctl enable sync-oss.service
5.5 检查服务状态
你可以使用以下命令检查你的服务状态:
sudo systemctl status sync-oss.service
这将显示你的服务的当前状态,包括是否正在运行和最近的日志条目。
5.6 查看日志
你可以使用 journalctl 来查看你的服务的日志:
journalctl -u sync-oss.service
这将显示你的服务的日志,你可以用它来调试任何问题。
这样你就创建了一个 systemd 服务来管理你的脚本。这样可以确保脚本在系统启动时自动运行,并在出现任何问题时自动重新启动。