mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 15:30:13 +01:00
175 lines
5.1 KiB
Bash
175 lines
5.1 KiB
Bash
#!/bin/bash
|
|
|
|
# Wekan Log Rotation Setup Script
|
|
# This script sets up log rotation for Wekan snap installation
|
|
|
|
set -e
|
|
|
|
# Configuration
|
|
SNAP_NAME="wekan"
|
|
SNAP_COMMON="/var/snap/${SNAP_NAME}/common"
|
|
LOGROTATE_DIR="/etc/logrotate.d"
|
|
WEKAN_LOGROTATE_CONF="${LOGROTATE_DIR}/${SNAP_NAME}"
|
|
|
|
# Log file paths
|
|
MONGODB_LOG="${SNAP_COMMON}/mongodb.log"
|
|
WEKAN_APP_LOG="${SNAP_COMMON}/wekan-app.log"
|
|
WEKAN_ERROR_LOG="${SNAP_COMMON}/wekan-error.log"
|
|
|
|
# Log rotation configuration
|
|
ROTATE_SIZE="100M"
|
|
KEEP_DAYS="30"
|
|
KEEP_COPIES="10"
|
|
|
|
log_message() {
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: $1" >&2
|
|
}
|
|
|
|
# Check if running as root
|
|
if [ "$EUID" -ne 0 ]; then
|
|
log_error "This script must be run as root"
|
|
exit 1
|
|
fi
|
|
|
|
# Check if snap is installed
|
|
if ! snap list | grep -q "^${SNAP_NAME} "; then
|
|
log_error "Snap ${SNAP_NAME} is not installed"
|
|
exit 1
|
|
fi
|
|
|
|
log_message "Setting up log rotation for Wekan snap..."
|
|
|
|
# Create logrotate configuration
|
|
cat > "${WEKAN_LOGROTATE_CONF}" << EOF
|
|
# Wekan Snap Log Rotation Configuration
|
|
# Generated by wekan logrotate-setup script
|
|
|
|
# MongoDB logs
|
|
${MONGODB_LOG} {
|
|
daily
|
|
missingok
|
|
rotate ${KEEP_COPIES}
|
|
compress
|
|
delaycompress
|
|
notifempty
|
|
create 644 root root
|
|
postrotate
|
|
# Send SIGUSR1 to MongoDB to reopen log file
|
|
if [ -f "${SNAP_COMMON}/mongodb.pid" ]; then
|
|
kill -USR1 \$(cat "${SNAP_COMMON}/mongodb.pid") 2>/dev/null || true
|
|
fi
|
|
# Alternative: restart MongoDB service if PID file doesn't exist - DISABLED
|
|
# if [ ! -f "${SNAP_COMMON}/mongodb.pid" ]; then
|
|
# snap restart ${SNAP_NAME}.mongodb 2>/dev/null || true
|
|
# fi
|
|
endscript
|
|
}
|
|
|
|
# Wekan application logs
|
|
${WEKAN_APP_LOG} {
|
|
daily
|
|
missingok
|
|
rotate ${KEEP_COPIES}
|
|
compress
|
|
delaycompress
|
|
notifempty
|
|
create 644 root root
|
|
postrotate
|
|
# Send SIGUSR1 to Wekan application to reopen log file
|
|
if [ -f "${SNAP_COMMON}/wekan.pid" ]; then
|
|
kill -USR1 \$(cat "${SNAP_COMMON}/wekan.pid") 2>/dev/null || true
|
|
fi
|
|
# Alternative: restart Wekan service if PID file doesn't exist
|
|
if [ ! -f "${SNAP_COMMON}/wekan.pid" ]; then
|
|
# snap restart ${SNAP_NAME}.wekan 2>/dev/null || true
|
|
fi
|
|
endscript
|
|
}
|
|
|
|
# Wekan error logs
|
|
${WEKAN_ERROR_LOG} {
|
|
daily
|
|
missingok
|
|
rotate ${KEEP_COPIES}
|
|
compress
|
|
delaycompress
|
|
notifempty
|
|
create 644 root root
|
|
postrotate
|
|
# Send SIGUSR1 to Wekan application to reopen log file
|
|
if [ -f "${SNAP_COMMON}/wekan.pid" ]; then
|
|
kill -USR1 \$(cat "${SNAP_COMMON}/wekan.pid") 2>/dev/null || true
|
|
fi
|
|
# Alternative: restart Wekan service if PID file doesn't exist
|
|
if [ ! -f "${SNAP_COMMON}/wekan.pid" ]; then
|
|
# snap restart ${SNAP_NAME}.wekan 2>/dev/null || true
|
|
fi
|
|
endscript
|
|
}
|
|
|
|
# Size-based rotation for large log files
|
|
${SNAP_COMMON}/*.log {
|
|
size ${ROTATE_SIZE}
|
|
missingok
|
|
rotate ${KEEP_COPIES}
|
|
compress
|
|
delaycompress
|
|
notifempty
|
|
create 644 root root
|
|
sharedscripts
|
|
postrotate
|
|
# Generic postrotate for all log files
|
|
# Try to signal processes to reopen log files
|
|
for pidfile in "${SNAP_COMMON}"/*.pid; do
|
|
if [ -f "\$pidfile" ]; then
|
|
kill -USR1 \$(cat "\$pidfile") 2>/dev/null || true
|
|
fi
|
|
done
|
|
# Restart services if no PID files found
|
|
if [ ! -f "${SNAP_COMMON}/mongodb.pid" ] && [ ! -f "${SNAP_COMMON}/wekan.pid" ]; then
|
|
# snap restart ${SNAP_NAME}.mongodb 2>/dev/null || true
|
|
# snap restart ${SNAP_NAME}.wekan 2>/dev/null || true
|
|
fi
|
|
endscript
|
|
}
|
|
EOF
|
|
|
|
log_message "Created logrotate configuration: ${WEKAN_LOGROTATE_CONF}"
|
|
|
|
# Test logrotate configuration
|
|
if logrotate -d "${WEKAN_LOGROTATE_CONF}" >/dev/null 2>&1; then
|
|
log_message "Logrotate configuration test passed"
|
|
else
|
|
log_error "Logrotate configuration test failed"
|
|
exit 1
|
|
fi
|
|
|
|
# Create log directory if it doesn't exist
|
|
mkdir -p "${SNAP_COMMON}"
|
|
|
|
# Set proper permissions
|
|
chown root:root "${WEKAN_LOGROTATE_CONF}"
|
|
chmod 644 "${WEKAN_LOGROTATE_CONF}"
|
|
|
|
# Create initial log files if they don't exist
|
|
touch "${MONGODB_LOG}" "${WEKAN_APP_LOG}" "${WEKAN_ERROR_LOG}"
|
|
chown root:root "${SNAP_COMMON}"/*.log
|
|
chmod 644 "${SNAP_COMMON}"/*.log
|
|
|
|
log_message "Log rotation setup completed successfully"
|
|
log_message "Configuration file: ${WEKAN_LOGROTATE_CONF}"
|
|
log_message "Log files will be rotated daily and when they exceed ${ROTATE_SIZE}"
|
|
log_message "Log files will be kept for ${KEEP_DAYS} days (${KEEP_COPIES} copies)"
|
|
log_message "To test log rotation manually: sudo logrotate -f ${WEKAN_LOGROTATE_CONF}"
|
|
log_message "To view logrotate status: sudo logrotate -d ${WEKAN_LOGROTATE_CONF}"
|
|
|
|
echo ""
|
|
echo "Next steps:"
|
|
echo "1. Configure MongoDB to log to file: sudo snap set ${SNAP_NAME} mongo-log-destination=snapcommon"
|
|
echo "2. Configure Wekan to log to file (if not already done)"
|
|
echo "3. Test log rotation: sudo logrotate -f ${WEKAN_LOGROTATE_CONF}"
|
|
echo "4. Monitor log files: ls -la ${SNAP_COMMON}/*.log*"
|