监测文件变动同步到阿里云OSS

0. 安装阿里云的ossutil64

安装ossutil

配置ossutil

注意看说明,按照指导一步一步来,要配置密钥等

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 服务来管理你的脚本。这样可以确保脚本在系统启动时自动运行,并在出现任何问题时自动重新启动。