https://github.com/usings/cron-pilot
A self-hosted cron task manager.
https://github.com/usings/cron-pilot
cronjob docker javascript shell task-manager task-scheduler typescript
Last synced: about 1 month ago
JSON representation
A self-hosted cron task manager.
- Host: GitHub
- URL: https://github.com/usings/cron-pilot
- Owner: usings
- License: mit
- Created: 2026-01-20T09:12:34.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2026-01-20T14:37:39.000Z (5 months ago)
- Last Synced: 2026-01-20T18:57:49.995Z (5 months ago)
- Topics: cronjob, docker, javascript, shell, task-manager, task-scheduler, typescript
- Language: TypeScript
- Homepage:
- Size: 323 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Contributing: .github/CONTRIBUTING.md
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README

A self-hosted cron task manager that provides an API and a web dashboard. It allows you to schedule shell commands using cron expressions, manage task states centrally, and review execution history, runtime metrics, and performance statistics.
## Features
- Task lifecycle management: create, update, enable/disable, and delete tasks
- Cron scheduling: powered by BullMQ workers
- Execution history: status, duration, exit code, and stdout/stderr logs
- Task metrics: total runs, failure count, and last/next run timestamps
- Auto-install: automatic package installation for executing standalone scripts via [Bun](https://bun.com/docs/runtime/auto-install)
## Deployment
This service can be deployed using Docker, either via the Docker CLI or Docker
Compose.
### Environment Variables
These environment variables configure dashboard authentication and security. Change defaults before production use.
| Name | Description | Required | Default |
|-----------------|--------------------------------------------|----------|-------------|
| `AUTH_SECRET` | JWT signing secret | Yes | — |
| `AUTH_USERNAME` | Dashboard login username | No | `root` |
| `AUTH_PASSWORD` | Dashboard login password | No | `password` |
> ⚠️ **Security note**: It is strongly recommended to set a strong `AUTH_SECRET` and change the default username and password before exposing the service.
### Run with Docker CLI
```bash
docker run -d \
--name cronpilot \
-p 3000:3000 \
-e AUTH_SECRET="change-me" \
-e AUTH_USERNAME="root" \
-e AUTH_PASSWORD="password" \
-v cronpilot-data:/data \
ghcr.io/usings/cron-pilot:latest
```
### Run with Docker Compose
```yaml
services:
cronpilot:
image: ghcr.io/usings/cron-pilot:latest
container_name: cronpilot
ports:
- "3000:3000"
environment:
AUTH_SECRET: change-me
AUTH_USERNAME: root
AUTH_PASSWORD: password
volumes:
- cronpilot-data:/data
restart: unless-stopped
volumes:
cronpilot-data:
```
Next, execute the following command to start the services:
```bash
docker compose up -d
```