我有一个转储数据库并将其复制到S3的脚本。这是调用脚本的crontab条目:
*/1 * * * * /root/scripts/backupDB.sh
backupDB.sh:
#!/bin/sh -e
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/
date_now=`date +%Y_%m_%d_%H_%M`
dir_name="db_backup"
tar_name="db_backup_${date_now}.tar.gz"
file_name="${dir_name}/${tar_name}"
if [ -z "$dir_name" ]; then
mkdir $dir_name
fi
log() {
echo $1
echo $1 >> ${HOME}/tmp/mybackup.log
}
do_cleanup(){
rm -rf db_backup*
log 'cleaning up....'
}
do_backup(){
log 'Starting the backup' && \
/usr/bin/mongodump -o ${HOME}/${dir_name} && \
log 'Data dump created'
/bin/tar -cjf ${HOME}/${tar_name} ${HOME}/${dir_name} && \
log 'Created archive'
log 'saving the backup archive in amazon S3' && \
/usr/bin/s3cmd put --acl-private ${HOME}/${tar_name} s3://bucket/db-backups/${tar_name} && \
log 'data backup saved in amazon s3'
}
do_backup && do_cleanup
如果通过终端运行,则相同的脚本会转储所有数据库。如果通过cron运行,则只转储每个数据库的一些集合。 mongodb日志被粘贴here.它没有显示任何奇怪的东西。您可以看到在每分钟开始时建立的连接,对应于调用脚本的crontab条目。但它也表明连接立即结束。可能是什么问题?
答案 0 :(得分:1)
脚本运行多长时间?
由于你经常从cron运行它,所以总是担心下一个实例可能会在第一个实例完成之前开始导致输出的各种问题,具体取决于脚本的功能。
您需要实现some form of locking以防止并发运行。