Interfata web Cronmaster afisand lista de cron jobs cu status live
DevOps

Cronmaster: o interfata web decenta peste crontab-ul pe care il uiti mereu

Ai o sansa buna sa ai undeva un crontab -l care arata ca o arheologie: linii comentate din 2021, un job care ruleaza de doua ori pentru ca cineva l-a adaugat si in /etc/cron.d/, si niciun mod sa stii daca ultima rulare a reusit fara sa sapi prin /var/log/syslog. Cron in sine e solid, roboteaza de zeci de ani fara sa clipeasca, dar interfata lui de administrare e un fisier text pe care il editezi cu vi si te rogi sa nu gresesti sintaxa.

Cronmaster e un proiect open-source, licentiat AGPL-3.0, care pune o interfata web moderna peste cron jobs-urile de pe un host (sau container), cu sintaxa human-readable, logging live si autentificare serioasa. L-am evaluat ca alternativa la editarea manuala a crontab-ului pe servere unde vrei vizibilitate reala asupra a ce ruleaza si cand.

Ce este, mai exact, Cronmaster

Cronmaster e o aplicatie Next.js + TypeScript, stilizata cu Tailwind CSS, distribuita ca un singur container Docker. In loc sa ruleze comenzi crontab in spate, acceseaza direct fisierul de crontab al hostului, ceea ce ii permite sincronizare in timp real cu starea reala a sistemului, chiar si atunci cand Cronmaster insusi ruleaza containerizat langa cron-ul hostului.

Interfata iti arata joburile existente in engleza clara (“in fiecare zi la 3:00 dimineata”, nu 0 3 * * *), iti permite sa creezi, editezi, clonezi si stergi joburi din UI, si vine cu preset-uri pentru programari comune (zilnic, orar, saptamanal) ca sa nu mai cauti sintaxa cron pe internet de fiecare data.

De ce conteaza asta

Problema reala cu cron nu e ca nu functioneaza, ci ca e opac. Cand un job esueaza silentios la 4 dimineata, afli abia cand cineva observa ca raportul lipseste sau backup-ul nu s-a facut. Cronmaster rezolva exact punctul asta: logging optional per job (stdout, stderr, exit code, timestamp), cu curatare automata, si actualizari live prin Server-Sent Events, deci poti urmari un job de lunga durata rulandu-se in timp real din browser, fara sa faci tail -f pe un log oarecare.

Ce primesti din cutie

  • UI modern, responsive, cu mod dark/light.
  • Monitorizare de sistem: uptime, memorie, CPU, GPU si informatii de retea ale hostului, direct in acelasi dashboard.
  • Management de joburi cron: creare, editare, stergere, clonare, cu sintaxa human-readable si preset-uri rapide.
  • Management de scripturi bash: creezi si gestionezi scripturi direct din UI, pentru a fi folosite in joburi.
  • Logging de executie optional, cu curatare automata a istoricului, capturand stdout/stderr/exit code/timestamp.
  • Actualizari live prin SSE: status si log streaming in timp real pentru joburi de lunga durata.
  • Executie inteligenta: joburile cu logging activat ruleaza asincron cu update-uri in fundal; cele fara logging ruleaza sincron, cu timeout de 5 minute.
  • REST API complet, cu autentificare optionala prin API key, pentru integrari externe.
  • Autentificare flexibila: parola simpla, OIDC/SSO (Authentik, Auth0, Keycloak, Okta, Google, Entra ID), sau ambele simultan.
  • Localizare in mai multe limbi, cu suport pentru traduceri custom.
  • Suport ARM64 si AMD64, deci merge si pe un Raspberry Pi, nu doar pe VPS-uri x86.

Instalare Cronmaster pe un VPS

Cronmaster ruleaza exclusiv containerizat, iar imaginea oficiala e pe GHCR. Configuratia minimala din README-ul proiectului:

cat > docker-compose.yml << 'EOF'
services:
  cronmaster:
    image: ghcr.io/fccview/cronmaster:latest
    container_name: cronmaster
    user: "root"
    ports:
      - "40123:3000"
    environment:
      - NODE_ENV=production
      - AUTH_PASSWORD=parola_ta_puternica
      - HOST_CRONTAB_USER=root
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./scripts:/app/scripts
      - ./data:/app/data
      - ./snippets:/app/snippets
    pid: "host"
    privileged: true
    restart: always
    init: true
EOF

docker compose up -d

Observa ca ruleaza privileged: true, monteaza socket-ul Docker si acceseaza pid: host, pentru ca are nevoie de acces direct la crontab-ul hostului si, optional, la alte containere. Asta inseamna un nivel de incredere ridicat acordat containerului, trateaza-l ca atare (izoleaza-l pe un VPS dedicat, nu langa alte aplicatii cu date sensibile).

Pentru firewall, expune doar portul UI-ului (aici 40123) in spatele unui reverse proxy TLS, niciodata direct public fara autentificare configurata dinainte:

ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

Un VPS modest e suficient pentru Cronmaster insusi, dar dimensioneaza-l dupa ce ruleaza in joburile pe care le administrezi, nu dupa aplicatia de management in sine.

Tipare de configurare care merita stiute

SSO peste parola simpla

Daca mai multi oameni din echipa au nevoie de acces la aceleasi joburi cron (ex: DevOps + on-call), configureaza OIDC in loc de o parola partajata. Cronmaster suporta orice provider OIDC standard, deci se integreaza cu ce ai deja (Keycloak self-hosted, sau Google/Entra ID daca esti deja pe acolo). Poti activa ambele metode simultan, util pentru un cont de “break glass” local plus SSO pentru restul.

Logging selectiv, nu universal

Nu activa logging pe toate joburile din reflex. Joburile fara logging ruleaza sincron cu un timeout strict de 5 minute, ceea ce e potrivit pentru task-uri scurte si deterministe. Joburile cu logging ruleaza asincron, deci sunt alegerea corecta pentru orice ruleaza mai mult sau produce output pe care vrei sa-l poti inspecta ulterior. Amestecarea gresita a celor doua moduri poate produce timeout-uri neasteptate pe joburi care de fapt aveau nevoie de executie in fundal.

API key pentru integrari externe

Daca ai deja un sistem de alerting sau un dashboard intern, foloseste REST API-ul cu autentificare prin API key in loc sa faci scraping pe UI. Documentatia completa e in howto/API.md din repo, iar API-ul iti permite sa citesti status de joburi si loguri programatic, exact ce ai nevoie pentru a integra Cronmaster intr-un flux de monitorizare mai larg.

Snippet-uri de scripturi reutilizabile

Feature-ul de management de scripturi bash iti permite sa pastrezi fragmente de cod reutilizabile (snippets) atasate joburilor. In loc sa copiezi acelasi bloc de shell in zece joburi diferite, il pastrezi o singura data si il referentiezi, reducand riscul ca o corectie sa fie aplicata doar in noua cursuri din zece locuri.

Unde Cronmaster nu e raspunsul potrivit

Daca ai o singura masina cu doua-trei joburi cron simple si stabile, adaugarea unui container privilegiat pentru asta e disproportionat, editeaza crontab-ul direct si mergi mai departe. Cronmaster nici nu inlocuieste un orchestrator real de workflow-uri (Airflow, Temporal, sau chiar un job scheduler cu retry logic si dependinte intre task-uri); e in continuare cron la baza, cu aceleasi limitari (fara retry automat sofisticat, fara DAG-uri de dependinte). Si data fiind nevoia de privileged: true plus acces la socket-ul Docker, nu il pui pe un host multi-tenant sau pe o masina cu alte aplicatii sensibile fara sa te gandesti serios la izolare.

Alternative pe care le-am luat in calcul

  • Cronicle : scheduler mai complet, cu clustering si dependinte intre joburi, dar cu o curba de invatare mai abrupta si o instalare mai grea decat un singur container.
  • crontab clasic + healthchecks.io (self-hosted ca Healthchecks ): pastrezi cron-ul simplu si adaugi doar monitorizarea prin heartbeat-uri HTTP, fara sa schimbi cum administrezi joburile.
  • Ofelia : scheduler minimalist pentru Docker, definit prin labels pe containere, fara UI, dar foarte usor daca deja orchestrezi totul cu Docker Compose.

Deci, sa-l rulezi?

Daca administrezi mai mult de o mana de joburi cron si te-ai prins vreodata verificand manual daca un backup a rulat aseara, Cronmaster merita testat. Interfata human-readable si logging-ul live economisesc timp real, iar SSO-ul e binevenit imediat ce nu mai esti singurul care are nevoie de acces. Ia in calcul serios cerintele de privilegii inainte sa il pui pe orice server care conteaza.

Vrei un VPS dedicat pentru instrumentele tale de operare, izolat de restul infrastructurii? Sau preferi sa lasi partea de configurare si mentenanta pe cineva altcineva? Serviciul nostru de administrare servere se ocupa exact de asta.

Avem Incredere & Suntem Membri

Suntem membri ai principalelor organizatii de infrastructura internet.

RIPE NCC MANRS PeeringDB RoTLD DSIX SBIX 4IXP LOCIX Euro-IX RIPE NCC MANRS PeeringDB RoTLD DSIX SBIX 4IXP LOCIX Euro-IX