CROW (Cron Routine Orchestrator Webapp) is a comprehensive web-based application for managing and scheduling cron jobs. This repository contains the backend server component responsible for managing all cron jobs, maintaining the web interface, handling real-time communication with clients, and providing a REST API for job orchestration.
CROW-Server is built with Python using Django and Django Channels, providing:
- A full-featured web dashboard for job management
- WebSocket-based real-time communication with remote clients
- A robust backend system for cron job scheduling and execution
- Database persistence for jobs, tasks, and client information
- 🎯 Intuitive Web Dashboard - Manage and monitor all your cron jobs from a centralized web interface
- ⚡ Real-time Updates - WebSocket communication for live job status updates
- 🔄 Client Management - Connect and manage multiple remote CROW clients
- 📅 Job Scheduling - Create and manage cron-based job schedules with flexible recurring options
- 🗂️ Task Organization - Organize jobs into logical tasks for better management
- 📊 Monitoring & Logging - Track job execution history and performance metrics
- 🔌 API-First Design - RESTful API endpoints for programmatic job management
- 📱 Responsive Design - Works seamlessly across desktop and mobile devices
CROW Server is distributed as a Docker image via GitHub Container Registry (GHCR).
The image is available at:
ghcr.io/cron-routine-orchestrator-webapp/crow-server:latest
- Docker Engine
- Docker Compose (recommended)
- Docker Desktop
- Docker Desktop
Verify your installation:
docker --version
docker compose versionCreate a directory for persistent application data, the application will live there:
mkdir crow_severStart the container, by running this in the directory:
docker run -d \
--name crow-server \
-p 4040:4040 \
-e USE_DOCKER=1 \
-e DEBUG=0 \
-e DB_PATH=/data/db.sqlite3 \
-v $(pwd)/data:/data \
ghcr.io/cron-routine-orchestrator-webapp/crow-server:latestThe web interface will be available at:
http://localhost:4040
docker logs -f crow-serverdocker stop crow-serverdocker rm -f crow-serverPull the latest image:
docker pull ghcr.io/cron-routine-orchestrator-webapp/crow-server:latestRecreate the container:
docker rm -f crow-server
docker run -d \
--name crow-server \
-p 4040:4040 \
-e USE_DOCKER=1 \
-e DEBUG=0 \
-e DB_PATH=/data/db.sqlite3 \
-v $(pwd)/data:/data \
ghcr.io/cron-routine-orchestrator-webapp/crow-server:latestAll application data remains intact because it is stored in the mounted data directory.
Create a docker-compose.yml file:
version: "3.9"
services:
crow-server:
image: ghcr.io/cron-routine-orchestrator-webapp/crow-server:latest
container_name: crow-server
restart: unless-stopped
ports:
- "4040:4040"
environment:
USE_DOCKER: "1"
DB_PATH: /data/db.sqlite3
SECRET_KEY: "django-insecure-8orjtc^_c$t03$m(8sry8(6#xny77ad^-%ur16gygdw!j#6=c("
DEBUG: "0"
ALLOWED_HOSTS: "*"
volumes:
- ./data:/dataCreate the application directory:
mkdir crow-serverStart the application:
docker compose up -dThe web interface will be available at:
http://localhost:4040
docker compose logs -fdocker compose downPull the newest image:
docker compose pullRecreate the container:
docker compose up -dVerify the running version:
docker psAll application data remains intact because it is stored in the mounted data directory.
CROW Server stores its SQLite database in:
./data/db.sqlite3
This location is mapped to the host system through a Docker volume. Updating or recreating containers will not remove your data as long as the data directory is preserved.
src/server/
├── __init__.py
├── __main__.py # Entry point for the server
├── base.html # Base HTML template
└── webapp/
├── backend/ # Backend logic and cron scheduling
│ ├── cron_backend/ # Cron job scheduling engine
│ ├── helper/ # Utility functions and type definitions
│ └── websocket_communication/ # WebSocket handlers for real-time communication
└── frontend/ # Django web interface
├── database_backend.py # Database configuration
├── manage.py # Django management script
├── frontend/ # Main Django app configuration
├── ui/ # User interface application
│ ├── models.py # Database models (Jobs, Tasks, Clients)
│ ├── views.py # View controllers
│ ├── urls.py # URL routing
│ ├── admin.py # Django admin configuration
│ ├── static/ # CSS and static files
│ └── templates/ # HTML templates
└── db.sqlite3 # SQLite database
CROW-Server consists of three main components:
-
Frontend (Django Web Interface)
- RESTful API endpoints
- HTML/CSS web dashboard
- Job and task management interfaces
-
Backend (Cron Engine)
- Cron job scheduling and execution
- Job state management
- Task queuing and processing
- Cron clock for time-based operations
-
WebSocket Communication Layer
- Real-time client-server messaging
- Job status updates
- Command execution on remote clients
- Bidirectional communication handler
The server provides a RESTful API for managing:
- Jobs - Create, read, update, delete jobs
- Tasks - Organize and manage task definitions
- Clients - Register and manage connected clients
We welcome contributions! Please see our Contributing Guidelines for information on how to get started.
Key areas for contribution:
- Bug fixes and improvements
- Documentation enhancements
- Feature implementations
- Performance optimizations
- Test coverage improvements
This project adheres to a Code of Conduct to ensure a welcoming and inclusive community.
- CROW-Client - Remote client for executing scheduled jobs
- CROW Organization - Main organization repository
For comprehensive documentation, visit:
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
- 📧 Report issues on GitHub Issues
- 💬 Join discussions and ask questions
- 📚 Check the documentation
- 🐛 Help us improve by providing feedback