123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- #!/bin/bash
- # MongoDB Control Script
- # Starts MongoDB 7.x server only
- # get wekan/mongo settings
- echo "Reading snap settings..."
- source $SNAP/bin/wekan-read-settings
- # Debug: Show what we got from snap settings
- echo "Snap settings loaded:"
- echo " MONGODB_BIND_IP: '${MONGODB_BIND_IP}'"
- echo " MONGODB_PORT: '${MONGODB_PORT}'"
- echo " MONGODB_BIND_UNIX_SOCKET: '${MONGODB_BIND_UNIX_SOCKET}'"
- # Debug: Check snap settings directly
- echo "Direct snap settings check:"
- echo " mongodb-port: $(snapctl get mongodb-port 2>/dev/null || echo 'not set')"
- echo " mongodb-bind-ip: $(snapctl get mongodb-bind-ip 2>/dev/null || echo 'not set')"
- echo " mongodb-bind-unix-socket: $(snapctl get mongodb-bind-unix-socket 2>/dev/null || echo 'not set')"
- if [ "true" == "${DISABLE_MONGODB}" ]; then
- echo "mongodb is disabled. Stop service"
- snapctl stop --disable ${SNAP_NAME}.mongodb
- exit 0
- fi
- # make sure we have set minimum env variables for locale
- if [ -z "${LANG}" ]; then
- export LANG=en_US.UTF-8
- fi
- export LC_ALL=C
- export PATH=/snap/${SNAP_NAME}/current/usr/bin:/snap/${SNAP_NAME}/current/bin:${PATH}
- export LD_LIBRARY_PATH=/snap/${SNAP_NAME}/current/lib:/snap/${SNAP_NAME}/current/lib/x86_64-linux-gnu:${LD_LIBRARY_PATH}
- # If temporary settings log exists, delete it
- if [ -f ${SNAP_COMMON}/settings.log ]; then
- rm ${SNAP_COMMON}/settings.log
- fi
- # Set MongoDB log destination to snapcommon for log file detection
- export MONGO_LOG_DESTINATION="snapcommon"
- # Set MongoDB data directory
- export MONGO_DATA_DIR="${SNAP_COMMON}"
- # Create MongoDB data directory if it doesn't exist
- if [ ! -d "$MONGO_DATA_DIR" ]; then
- mkdir -p "$MONGO_DATA_DIR"
- chmod 755 "$MONGO_DATA_DIR"
- fi
- # Set MongoDB log file path
- export MONGO_LOG_FILE="${SNAP_COMMON}/mongodb.log"
- # Build bind options from snap settings
- BIND_OPTIONS=""
- if [ "nill" != "${MONGODB_BIND_UNIX_SOCKET}" ] && [ -n "${MONGODB_BIND_UNIX_SOCKET}" ]; then
- BIND_OPTIONS+=" --unixSocketPrefix ${MONGODB_BIND_UNIX_SOCKET}"
- fi
- if [ -n "${MONGODB_BIND_IP}" ]; then
- BIND_OPTIONS+=" --bind_ip ${MONGODB_BIND_IP}"
- else
- BIND_OPTIONS+=" --bind_ip 127.0.0.1"
- fi
- if [ -n "${MONGODB_PORT}" ]; then
- BIND_OPTIONS+=" --port ${MONGODB_PORT}"
- else
- BIND_OPTIONS+=" --port 27019"
- fi
- # Debug: Show what settings we're using
- echo "MongoDB settings:"
- echo " MONGODB_BIND_IP: ${MONGODB_BIND_IP:-127.0.0.1}"
- echo " MONGODB_PORT: ${MONGODB_PORT:-27017}"
- echo " MONGODB_BIND_UNIX_SOCKET: ${MONGODB_BIND_UNIX_SOCKET:-not set}"
- echo " BIND_OPTIONS: ${BIND_OPTIONS}"
- # Check if MongoDB is already running
- check_mongodb_running() {
- local port="${MONGODB_PORT:-27017}"
- local bind_ip="${MONGODB_BIND_IP:-127.0.0.1}"
-
- # Check if MongoDB is already running on the configured port
- if netstat -tuln 2>/dev/null | grep -q ":${port} "; then
- echo "MongoDB is already running on port ${port}"
- return 0
- fi
-
- # Alternative check using lsof if netstat is not available
- if command -v lsof >/dev/null 2>&1; then
- if lsof -i ":${port}" >/dev/null 2>&1; then
- echo "MongoDB is already running on port ${port} (detected via lsof)"
- return 0
- fi
- fi
-
- # Check if there's a PID file and the process is still running
- if [ -f "${SNAP_COMMON}/mongodb.pid" ]; then
- local pid=$(cat "${SNAP_COMMON}/mongodb.pid" 2>/dev/null)
- if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then
- echo "MongoDB is already running (PID: $pid)"
- return 0
- else
- # Remove stale PID file
- rm -f "${SNAP_COMMON}/mongodb.pid"
- fi
- fi
-
- return 1
- }
- # Cleanup function to remove PID file on exit
- cleanup() {
- rm -f "${SNAP_COMMON}/mongodb.pid"
- }
- trap cleanup EXIT
- # Check if MongoDB is already running
- if check_mongodb_running; then
- echo "MongoDB is already running. Exiting to prevent multiple instances."
- exit 0
- fi
- # Start MongoDB 7.x server
- echo "Starting MongoDB 7.x server..."
- # Create PID file
- echo $$ > "${SNAP_COMMON}/mongodb.pid"
- exec /snap/${SNAP_NAME}/current/bin/mongod \
- --dbpath="$MONGO_DATA_DIR" \
- --logpath="$MONGO_LOG_FILE" \
- --logappend $BIND_OPTIONS
|