自动化同步外网文件至内网
2024-05-06 tech shell linux 4 mins 1593 字
下面是一个我的示例脚本。在运行脚本之前,请确保已经安装了所需的软件和工具,并且已经配置了正确的权限和认证信息。
#!/bin/bash
set -e
filename="$1"
# 设置远程机器的地址、用户名和密码
remote_host="your_username@your_remote_ip"
password="your_password"
lockfile="$filename.lock"
# 获取当前日期和时间,并格式化为年月日时分秒
current_time=$(date +"%Y%m%d%H%M%S")
# 创建以当前日期和时间命名的zip文件
zip_file_name="$filename.${current_time}.zip"
# 检查远程服务器上是否存在.lock文件,如果存在则直接退出
if ssh your_username@your_remote_ip '[ -f /path/to/lockfile/$lockfile ]'; then
echo "$lockfile file exists on remote server. Exiting..."
exit 0
else
echo "$lockfile not exists"
fi
# 在远程服务器上检查文件是否存在,如果存在则创建.lock文件
ssh your_username@your_remote_ip "[ -f /path/to/remote/directory/$filename.zip ] && touch /path/to/lockfile/$lockfile"
# 拷贝文件到本地
scp your_username@your_remote_ip:/path/to/remote/directory/$filename.zip /path/to/local/directory/$zip_file_name
# 拷贝文件到远程机器
/opt/homebrew/bin/sshpass -p "$password" scp /path/to/local/directory/$zip_file_name "$remote_host:/path/to/remote/directory/$zip_file_name"
echo ">>>>>>>>>>>>>>>>>> File '$zip_file_name' copied to remote machine successfully."
# 清理远程服务器上的文件和锁文件
ssh your_username@your_remote_ip "rm /path/to/remote/directory/$filename.zip /path/to/lockfile/$lockfile"
需要替换脚本中的以下信息:
your_username
: 远程服务器的用户名。your_remote_ip
: 远程服务器的IP地址或域名。your_password
: 远程服务器的密码。请注意,为了安全考虑,你可能需要使用更安全的认证方法,比如SSH密钥对。/path/to/remote/directory/
: 在远程服务器上文件所在的路径。/path/to/local/directory/
: 本地文件所在的路径。
这个脚本首先检查远程服务器上是否存在锁文件,以确保不会同时运行多个实例。
然后它检查远程服务器上是否存在要同步的文件,如果存在,则创建锁文件以防止其他实例同时操作该文件。
接下来,它将文件从远程服务器复制到本地目录,然后将文件从本地目录复制到另一个远程服务器。
最后,它清理远程服务器上的文件和锁文件。