mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 07:20:12 +01:00
133 lines
4.1 KiB
Bash
Executable file
133 lines
4.1 KiB
Bash
Executable file
#!/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
|