| 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
 
 
  |