bash - 带有 MUP 的流星:在 cronjob 中使用的 bash 脚本中的 mongodump
问题描述
我正在使用 MUP 运行 Meteor 应用程序进行部署。所以在服务器上我创建了一个备份脚本,如下所示:
#!/bin/sh
#export mongodump
docker exec -it mongodb mongodump --archive=/root/mongodump.gz --gzip
#create datestring
filedate=$(date +%Y-%m-%d_%H-%M-%S)
#put dump export in file
docker cp mongodb:/root/mongodump.gz mongodump_$filedate.gz
到目前为止一切都很好,一切都按预期工作。
当我将脚本添加到 cronjob 时,奇怪的问题就开始了
0 1 * * * /home/user1/backup.sh
这也有效,即mongodump.gz
正确添加。但是,无论出于何种原因,只要 cronjob 创建备份,备份总是相同的(匹配 SHA-256-HASH)。当我再次手动运行备份脚本时,转储的 SHA-Hash 和文件大小会发生变化。下次调用 cronjob 备份时,与之前创建的备份相同。
有什么想法吗?
解决方案
很难说您的备份脚本中可能出了什么问题,但是对于相同的设置(通过 cronjob 备份 mup 部署的流星数据库),我使用此脚本并且效果很好:
#!/bin/bash
# fail on error
set -e
# NOTE: no -it in docker command, see
# https://stackoverflow.com/questions/43099116/error-the-input-device-is-not-a-tty
docker exec mongodb mongodump -d mydb -o /data/db/ --gzip -- -j 1
mkdir -p /home/ubuntu/backup/
sudo rm -rf /home/ubuntu/backup/mydb
sudo mv /var/lib/mongodb/mydb /home/ubuntu/backup
sudo chown ubuntu:ubuntu -R /home/ubuntu/backup/mydb
有几点需要注意:
- 如注释所示,我必须
-it
从 docker 命令中删除 以避免终端不是 tty 的问题,请参见此处。 - 不需要使用
docker cp
,因为 mup 使用容器内的持久文件夹,可以直接从主机访问。
推荐阅读
- css - 如何将标题定位在某个位置?
- netbeans - 为 tinylog 创建 Netbeans 代码模板
- python - 创建一个包含超过 3 个元音的所有单词(包括连字符的单词)的列表
- git - 检查远程 git 标签是否已更改
- javascript - 如何设置jQuery中图像的宽度?
- c++ - 如何检测 QWidget 的关闭按钮被按下?
- javascript - 为什么模糊事件反复触发?有时您无法关闭警报窗口
- c++ - c++ 中 arr[-1] 的奇怪行为
- python-3.x - 我正在尝试运行梯度提升分类器
- python - 尝试在 PYSPARK 中的 Nonetype 属性(null)上跳过 python UDF