首页 > 解决方案 > 带有 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 备份时,与之前创建的备份相同。

有什么想法吗?

标签: bashmeteorcronbackupmup

解决方案


很难说您的备份脚本中可能出了什么问题,但是对于相同的设置(通过 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 使用容器内的持久文件夹,可以直接从主机访问。

推荐阅读