带有 MUP 的流星:在 cronjob 中使用的 bash 脚本中的 mongodump

meteor with MUP: mongodump in bash script used in a cronjob

我正在 运行使用 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 部署的 meteor 数据库),我使用了这个脚本并且运行良好:

#!/bin/bash

# fail on error
set -e

# NOTE: no -it in docker command, see
# 
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

有几点需要注意:

  • 正如注释所示,我必须从 docker 命令中删除 -it 以避免终端不是 tty 的问题,请参阅
  • 不需要使用 docker cp,因为 mup 在容器内使用了一个持久文件夹,可以直接从主机访问。