【问题标题】:Monthly script for copying file from server to another server if exist用于将文件从服务器复制到另一台服务器的每月脚本(如果存在)
【发布时间】:2021-07-06 02:47:29
【问题描述】:

目前我按照以下步骤将文件从 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 命令替换了以前的代码

【问题讨论】:

    标签: linux bash automation cron


    【解决方案1】:

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

     * * 20 * * my_bash_script.sh
    

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

    【讨论】:

    • 太棒了!所以我可以使用它来代替 nohup 和 "TodayDate=$(date +%d) if [ "$TodayDate" -eq "20" ]" 部分。但是,如何检查远程服务器中的文件是否存在?
    • 我还编辑了我的问题。现在它包含了你的 cron 脚本,看起来更优雅
    • 我刚刚看到您还编辑了您的答案。请修改您的答案以编写每一步(my_bash_script.sh 应该是什么样子,我应该在哪里/如何写“* * 20 * * my_bash_script.sh”等),我会接受您的回答。非常感谢!
    【解决方案2】:

    但是,如何检查远程服务器中的文件是否存在?

    不,如上所述,你不需要自己做,除非你想对现有文件做额外的操作。

    如果您只想同步文件,那么只需尝试一下:

    rsync path/to/local_file remote_host:path/to/remote_directory
    

    让我知道它是否适合你。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-22
      • 2014-05-17
      • 2016-10-18
      • 2020-08-31
      • 2018-07-08
      • 2016-02-26
      • 2020-06-18
      相关资源
      最近更新 更多