首页 > 解决方案 > 用于将文件从服务器复制到另一台服务器的每月脚本(如果存在)

问题描述

目前我按照以下步骤将文件从 server_x 复制到 server_y(假设我在 2021 年 4 月 20 日运行此代码 = 202104)

sshpass -p "my_server_y_password" ssh myusernameY@server_y
sshpass -p "my_server_x_password" scp myusernameX@server_x:server_x/file/path/file_202104.txt server_y/file/path

我想让这段代码在每个月的 20 日运行,并使用 YYYYMM 日期格式来搜索文件。如果文件不存在,它不应该做任何事情

我认为代码应该看起来像(在 my_bash_script.sh 内)

year_month="$(date +'%Y%m')"
FILE=file/path/file_$(year_month).txt
# somehow check if file from server_x exists (currently I don't know how to do it on a different server)
if test -f "$FILE"; then 
    sshpass -p my_server_y_password ssh myusernameY@server_y
    sshpass -p "my_server_x_password" scp myusernameX@server_x:${FILE} server_y/file/path
fi

而且,在此之后,我应该运行我的脚本

 * * 20 * * my_bash_script.sh

我确信有更优雅的解决方案来解决我的问题。另外,我认为我的代码的某些部分甚至无法正常工作。请帮我找到适合我的任务的解决方案

编辑原因:按照@looppool 的建议,我用 crontab 命令替换了以前的代码

标签: linuxbashautomationcron

解决方案


是的,对此有更优雅的解决方案。使用cron. 以这个答案为例。为方便起见,只需更改第三个参数:

 * * 20 * * my_bash_script.sh

对于您更新的问题,您不必自己检查文件是否存在或是否已更新。只需使用rsync- 命令将文件从一台服务器复制到另一台服务器。它只会更新已更改的文件。rsync还了解ssh-Protocol,您将很容易在互联网上找到很多关于如何做到这一点的示例。


推荐阅读