引子
COSCLI
是腾讯云官方提供的对象存储客户端命令行工具,支持多种操作,具体介绍请见COSCLI简介。为了实现自动将本地文件变动同步到腾讯云,使用inotify
工具监视文件变动,并在文件变动时通过COSCLI自动上传到对象存储。
安装COSCLI
参考下载与安装配置,以amd64
架构为例:
wget https://cosbrowser.cloud.tencent.com/software/coscli/coscli-linux-amd64 && mv coscli-linux-amd64 /usr/local/bin/coscli && chmod 755 /usr/local/bin/coscli
检查是否安装成功:
coscli --version
配置COSCLI
工具
开始交互式配置COSCLI
:
coscli config init
首先需要设置身份模式Mode
,可选的枚举值有:SecretKey
和 CvmRole
,由于是在腾讯云服务器中使用,因此选择CvmRole
,Cvm Role Name
选择设置的CVM角色实例名称(需提前管理实例角色并添加对应的权限),其余按照提示配置存储桶名称和存储桶所在地域的域名即可。
使用inotify
监控文件变动并自动上传
安装inotify
(Debian系):
apt install inotify-tools -y
编写同步脚本:
#!/bin/sh
# 需要同步的文件夹
LOCAL_DIR="/target/"
# 目标对象存储桶
COS_TARGET="cos://target/"
LOG_FILE="/www/cos/logs/cos_sync.log"
COSCLI_OPTIONS="--recursive --delete --force --snapshot-path"
SNAPSHOT_PATH="/www/cos/snapshot/target"
echo "[$(date "+%Y-%m-%d %H:%M:%S")] 信息: 启动COS实时同步服务,监控目录: $LOCAL_DIR" | tee -a "$LOG_FILE"
inotifywait -m -r --timefmt '%Y-%m-%d %H:%M:%S' --format '[%T] %w %e %f' \
-e create,modify,move,delete "$LOCAL_DIR" |
while read -r time event_dir event file; do
echo "[$(date "+%Y-%m-%d %H:%M:%S")] 检测到变化: $event $event_dir$file" | tee -a "$LOG_FILE"
echo "[$(date "+%Y-%m-%d %H:%M:%S")] 开始同步到 $COS_TARGET ..." | tee -a "$LOG_FILE"
/usr/local/bin/coscli sync "$LOCAL_DIR" "$COS_TARGET" $COSCLI_OPTIONS "$SNAPSHOT_PATH" 2>&1 | tee -a "$LOG_FILE"
COS_EXIT_CODE=$?
if [ $COS_EXIT_CODE -eq 0 ]; then
echo "[$(date "+%Y-%m-%d %H:%M:%S")] 成功: 同步完成。" | tee -a "$LOG_FILE"
else
echo "[$(date "+%Y-%m-%d %H:%M:%S")] 错误: 同步失败,退出代码: $COS_EXIT_CODE" | tee -a "$LOG_FILE"
fi
done
以上脚本会将文件夹内所有文件(--recursive
)包含删除在内(--delete
)的所有变更同步(sync)到对象存储桶中,由于默认过程中还需要手动确认,因此还需要加入--force
强行跳过,并保存快照信息(–snapshot-path
)以加速目录文件同步。
将同步脚本设置为开机启动
通常使用Systemd
服务设置脚本开机自启,此处省略。