#!/bin/bash ################################################## # ENV # # - MONGO_OPTS # # Mount dir # # - LOG_DIR # # - DATA_DIR # ################################################## set -euo pipefail export LANG=en_US.UTF-8 trap Quit EXIT PIDS= GOT_SIGTERM= MONGO_OPTS="${MONGO_OPTS:---bind_ip_all}" LOG_DIR='/var/log/mongo' DATA_DIR='/var/lib/mongo' function Print { local file=/dev/null [ '-f' = "$1" ] && file=$2 && shift && shift date +"[%F %T] $*" | tee -a $file } function Quit { Print killing mongod ... mongod --dbpath $DATA_DIR --shutdown || true while :; do pkill -f mongod && Print killing mongod ... || break sleep 1 done Print Container stopped. test -n "$GOT_SIGTERM" } function Init { Print Initing mongod ... chown -R mongod:mongod $LOG_DIR $DATA_DIR rm -f /tmp/mongodb-27017.sock } function StartProc { Print Starting mongodb ... su - mongod -c "mongod \ --port 27017 \ --dbpath $DATA_DIR \ --unixSocketPrefix /tmp \ --logpath $LOG_DIR/mongod.log \ --logappend \ $MONGO_OPTS" & PIDS="$PIDS $!" while sleep 1; do [ -e /tmp/mongodb-27017.sock ] && break || echo -n . [ ! -e /proc/$! ] && echo && Print unexpected error! && exit done echo && Print Mongodb is ready for connections. } function Main { local pid= Init StartProc trap "GOT_SIGTERM=1; Print Got SIGTERM ..." SIGTERM while [ -z "$GOT_SIGTERM" ] && sleep 1; do for pid in $PIDS; do [ ! -e /proc/$pid ] && Print Unexpected error! && exit done done } # Start here Main