| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 | #!/bin/bash# MongoDB Control Script# Starts MongoDB 7.x server only# get wekan/mongo settingsecho "Reading snap settings..."source $SNAP/bin/wekan-read-settings# Debug: Show what we got from snap settingsecho "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 directlyecho "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 0fi# make sure we have set minimum env variables for localeif [ -z "${LANG}" ]; then    export LANG=en_US.UTF-8fiexport LC_ALL=Cexport 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 itif [ -f ${SNAP_COMMON}/settings.log ]; then    rm ${SNAP_COMMON}/settings.logfi# Set MongoDB log destination to snapcommon for log file detectionexport MONGO_LOG_DESTINATION="snapcommon"# Set MongoDB data directoryexport MONGO_DATA_DIR="${SNAP_COMMON}"# Create MongoDB data directory if it doesn't existif [ ! -d "$MONGO_DATA_DIR" ]; then    mkdir -p "$MONGO_DATA_DIR"    chmod 755 "$MONGO_DATA_DIR"fi# Set MongoDB log file pathexport MONGO_LOG_FILE="${SNAP_COMMON}/mongodb.log"# Build bind options from snap settingsBIND_OPTIONS=""if [ "nill" != "${MONGODB_BIND_UNIX_SOCKET}" ] && [ -n "${MONGODB_BIND_UNIX_SOCKET}" ]; then    BIND_OPTIONS+=" --unixSocketPrefix ${MONGODB_BIND_UNIX_SOCKET}"fiif [ -n "${MONGODB_BIND_IP}" ]; then    BIND_OPTIONS+=" --bind_ip ${MONGODB_BIND_IP}"else    BIND_OPTIONS+=" --bind_ip 127.0.0.1"fiif [ -n "${MONGODB_PORT}" ]; then    BIND_OPTIONS+=" --port ${MONGODB_PORT}"else    BIND_OPTIONS+=" --port 27019"fi# Debug: Show what settings we're usingecho "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 runningcheck_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 exitcleanup() {    rm -f "${SNAP_COMMON}/mongodb.pid"}trap cleanup EXIT# Check if MongoDB is already runningif check_mongodb_running; then    echo "MongoDB is already running. Exiting to prevent multiple instances."    exit 0fi# Start MongoDB 7.x serverecho "Starting MongoDB 7.x server..."# Create PID fileecho $$ > "${SNAP_COMMON}/mongodb.pid"exec /snap/${SNAP_NAME}/current/bin/mongod \    --dbpath="$MONGO_DATA_DIR" \    --logpath="$MONGO_LOG_FILE" \    --logappend $BIND_OPTIONS
 |