mirror of
https://github.com/alexhopeoconnor/bom-local-service.git
synced 2026-10-03 21:21:59 +10:00
Add Xvfb monitoring and restart functionality
- Move startup script to scripts/docker-start.sh for better organization - Add automatic monitoring and restart of Xvfb if it crashes - Improve error handling and cleanup on container shutdown - Prevents cache update failures when Xvfb process dies
This commit is contained in:
+3
-6
@@ -34,12 +34,9 @@ COPY --from=publish /app/publish .
|
||||
# Create cache directory for screenshots
|
||||
RUN mkdir -p /app/cache && chmod 777 /app/cache
|
||||
|
||||
# Create startup script to run Xvfb and then the app
|
||||
RUN echo '#!/bin/bash\n\
|
||||
Xvfb :99 -screen 0 1920x1080x24 > /dev/null 2>&1 &\n\
|
||||
export DISPLAY=:99\n\
|
||||
exec dotnet BomLocalService.dll' > /app/start.sh && \
|
||||
chmod +x /app/start.sh
|
||||
# Copy startup script
|
||||
COPY scripts/docker-start.sh /app/start.sh
|
||||
RUN chmod +x /app/start.sh
|
||||
|
||||
# OCI labels for GitHub Container Registry metadata
|
||||
LABEL org.opencontainers.image.source="https://github.com/alexhopeoconnor/bom-local-service"
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# Function to start Xvfb
|
||||
start_xvfb() {
|
||||
if ! pgrep -f "Xvfb :99" > /dev/null; then
|
||||
echo "Starting Xvfb on display :99..."
|
||||
Xvfb :99 -screen 0 1920x1080x24 -ac +extension GLX +render -noreset > /dev/null 2>&1 &
|
||||
sleep 1
|
||||
if ! pgrep -f "Xvfb :99" > /dev/null; then
|
||||
echo "ERROR: Xvfb failed to start" >&2
|
||||
return 1
|
||||
fi
|
||||
echo "Xvfb started successfully"
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# Function to monitor and restart Xvfb if it dies (runs as background process)
|
||||
monitor_xvfb() {
|
||||
# Monitor while PID 1 (dotnet after exec) is still running
|
||||
while kill -0 1 2>/dev/null; do
|
||||
sleep 5
|
||||
if ! pgrep -f "Xvfb :99" > /dev/null; then
|
||||
echo "WARNING: Xvfb process not found, restarting..." >&2
|
||||
start_xvfb || true
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
# Cleanup function
|
||||
cleanup() {
|
||||
echo "Shutting down Xvfb..."
|
||||
pkill -f "Xvfb :99" || true
|
||||
}
|
||||
|
||||
# Set up signal handlers for cleanup
|
||||
trap cleanup SIGTERM SIGINT EXIT
|
||||
|
||||
# Start Xvfb
|
||||
start_xvfb || exit 1
|
||||
|
||||
# Export DISPLAY
|
||||
export DISPLAY=:99
|
||||
|
||||
# Start monitoring in background (will check if PID 1 is still running)
|
||||
monitor_xvfb &
|
||||
|
||||
# Start the .NET application (replaces shell as PID 1)
|
||||
exec dotnet BomLocalService.dll
|
||||
Reference in New Issue
Block a user