76 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/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 2; do
 | |
|         for pid in $PIDS; do
 | |
|             [ ! -e /proc/$pid ] && Print Unexpected error! && exit
 | |
|         done
 | |
|     done
 | |
| }
 | |
| 
 | |
| # Start here
 | |
| Main
 | |
| 
 |