RESTARTED_TODAY=false # Flag to track if containers have been restarted today
while true; do
    CURRENT_TIME=$(date +'%H:%M')
    if [ "$CURRENT_TIME" = '04:00' ]; then
        if [ "$RESTARTED_TODAY" = false ]; then
            echo "$(date): It's 04:00. Initiating Docker container restart process..."

            CONTAINER_IDS=$(docker ps -q)

            if [ -z "$CONTAINER_IDS" ]; then
                echo "$(date): No running Docker containers found to restart."
            else
                echo "$(date): Found containers: $CONTAINER_IDS"
                for CONTAINER_ID in $CONTAINER_IDS; do
                    echo "$(date): Restarting container: ${CONTAINER_ID}"
                    docker restart "${CONTAINER_ID}"
                    # Check if the restart command was successful (optional, but good practice)
                    if [ $? -eq 0 ]; then
                        echo "$(date): Successfully restarted ${CONTAINER_ID}."
                    else
                        echo "$(date): Failed to restart ${CONTAINER_ID}. Continuing to next container."
                    fi
                    echo "$(date): Waiting 10 seconds before next container restart..."
                    sleep 10
                done
                echo "$(date): All specified Docker containers have been processed for restart."
            fi
            RESTARTED_TODAY=true # Set the flag to true to prevent re-running until next day
            echo "$(date): Restart cycle for today (04:00) completed."
        else
            echo "$(date): It's 04:00, but containers already restarted today. Skipping."
        fi
    else
        # Reset the flag once the time passes 04:00, preparing for the next day's restart
        if [ "$RESTARTED_TODAY" = true ]; then
            echo "$(date): Time is no longer 04:00. Resetting restart flag for tomorrow."
            RESTARTED_TODAY=false
        fi
    fi

    # Sleep for a shorter duration (e.g., 30 seconds) to ensure the 04:00 mark is caught reliably,
    # but not so short as to consume excessive CPU.
    sleep 30
done