linux - 用于将文件从服务器复制到另一台服务器的每月脚本(如果存在)
问题描述
目前我按照以下步骤将文件从 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 命令替换了以前的代码
解决方案
是的,对此有更优雅的解决方案。使用cron
. 以这个答案为例。为方便起见,只需更改第三个参数:
* * 20 * * my_bash_script.sh
对于您更新的问题,您不必自己检查文件是否存在或是否已更新。只需使用rsync
- 命令将文件从一台服务器复制到另一台服务器。它只会更新已更改的文件。rsync
还了解ssh
-Protocol,您将很容易在互联网上找到很多关于如何做到这一点的示例。
推荐阅读
- ios - 如何允许我的应用在所有 IOS 设备上可用
- r - 安排ggplots并为他们使用一个commom图例
- python - numpy.AxisError:来源:轴 2 超出维度 2 数组的范围
- python - 在文件中附加一行,然后不久将其删除
- python - 当包源来自特定网站时,如何格式化 requirements.txt?
- c++ - 使用 C++ 排队学习
- python - 从另一个数组中选择具有列索引的每一行中的元素
- java - 在封闭范围内定义的 Bool var dbgotAltered
- c++ - 来自 C++ lambda 的 auto&& 返回类型
- javascript - 在 JSON 中获得图像链接后,如何使图像出现在网络浏览器上