#!/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