Com programar tasques automàtiques amb Crontab a Linux

  • Cron i crontab permeten programar tasques automàtiques a Linux definint horaris precisos mitjançant cinc camps de temps i ordres.
  • És essencial controlar hora del sistema, PATH, permisos i variables dentorn perquè les tasques sexecutin correctament i sense errors silenciosos.
  • L'activitat de cron pot generar impacte en rendiment i requereix bones pràctiques, logs i monitoratge per evitar conflictes i sobrecàrregues.
  • Hi ha eines i alternatives com Anacron, Fcron o launchd que amplien les possibilitats de programació més enllà del cron clàssic.

tasques automàtiques amb Crontab a Linux

Si treballes amb Linux tard o d'hora necessites que el sistema faci coses per tu sense que hagis d'estar davant del teclat: còpies de seguretat nocturnes , neteja de fitxers temporals, generació d'informes o sincronització de dades . Per tot això, el vell conegut dels sistemes Unix continua sent el rei: cron.

Encara que a primera vista pugui imposar una mica, cron i el fitxer crontab són molt més senzills del que semblen. Amb un parell de conceptes clars podràs programar tasques automàtiques molt potents i flexibles , tant pel teu usuari com a nivell de sistema. A les properes línies veuràs com funciona cron, com es configura crontab, quins detalls cal vigilar (hora del sistema, permisos, PATH…), errors típics, impacte en rendiment, alternatives i molt més.

Què és cron i per què és tan important a Linux?

En els sistemes tipus Unix, cron és un dimoni (daemon) que s'executa en segon pla des que el sistema arrenca . La seva missió és molt simple: cada minut revisa si hi ha alguna tasca programada per a aquest instant i, si n'hi ha, l'executa. Ni més ni menys.

què és Oreaon 10
Article relacionat:
Oreon 10: què ofereix aquesta distro Linux, versions i avantatges

Perquè això tingui sentit, és clau que el sistema tingui data, hora i zona horària correctament configurades . Si el rellotge va avançat, endarrerit o amb una zona horària incorrecta, les tasques de cron es llançaran fora d'hora. Podeu revisar l'estat de l'hora del sistema amb:

timedatectl

Aquesta ordre us mostra si el rellotge està sincronitzat, quina zona horària s'està usant i si hi ha un servidor NTP actiu. Si veus que la zona horària és incorrecta, pots canviar-la, per exemple, a Europa/Madrid amb:

timedatectl set-timezone Europe/Madrid

Normalment les distribucions Linux ja porten configurats servidors NTP per sincronitzar el rellotge. Si necessites ajustar-los o afegir-ne d'altres, es fa a través del servei NTP i el seu fitxer de configuració, per exemple /etc/ntp.conf , depenent de la distro i del dimoni NTP concret.

En funció de la distribució, el servei cron s'inicia des de rutes com /etc/rc.d/ o /etc/init.d , encara que avui dia gairebé sempre es gestiona amb systemd. El dimoni revisa fitxers com /etc/crontab , /var/spool/cron o els fitxers a /etc/cron.d cada minut per veure si hi ha treballs pendents d'executar.

Crontab: la taula de tasques de cron

El cor de la programació en cron és el fitxer crontab, una taula de tasques on es defineixen les ordres i el seu horari . Cada usuari pot tenir el seu propi crontab, de manera que no cal que sigui root per automatitzar tasques personals.

Per treballar amb el vostre crontab d'usuari s'utilitza la mateixa ordre crontab . Amb ell pots crear, editar, llistar o esborrar les tasques programades sense haver de tocar directament els fitxers de sistema.

Sintaxi bàsica d'una línia a crontab

Cada línia de crontab correspon a un treball de cron i segueix aquest patró de cinc camps de temps més l'ordre:

minuto hora día_del_mes mes día_de_la_semana comando

Cada camp pot agafar valors específics o caràcters especials. Els rangs habituals són els següents, i és important tenir-los clars perquè són el nucli de la programació:

  • minut: valors de 0 a 59.
  • Hora: valors de 0 a 23.
  • Dia del mes: valors de 1 a 31.
  • mes: valors de 1 a 12 o noms de mes abreujats en alguns sistemes.
  • Dia de la setmana: valors de 0 a 7, on 0 i 7 solen representar diumenge; també es poden fer servir noms abreujats en anglès (mon, tue…).

Després d'aquests cinc camps va l' ordre a executar , que pot ser des d'un binari del sistema fins a un script d'intèrpret d'ordres, Python, PHP, etc. Allò que escriuries en una terminal, ho pots plasmar aquí, tenint en compte l'entorn restringit en què corre cron.

Caràcters especials en les expressions de cron

Per no tornar-te boig escrivint munts de línies, cron admet diversos modificadors i caràcters especials que donen molta més potència a la programació:

  • *: significa “tots els valors” en aquest camp. Per exemple, * al camp mes implica tots els mesos.
  • ,: separa una llista de valors. Per exemple, 1,15 el dia del mes executa la tasca el dia 1 i el dia 15.
  • -: indica un rang continu. Per exemple, 1-5 dia de la setmana equival a dilluns a divendres.
  • /: s'utilitza com a pas o interval, normalment al costat de * (per exemple, */10 en minuts significa cada 10 minuts).
  • rangs amb excepció: combinant rangs, llistes i passos es poden crear regles complexes, com executar una tasca en un ventall de minuts excepte un de concret.

A més, als fitxers crontab és molt habitual recórrer al coixinet (#) per escriure comentaris . Qualsevol línia que comenci per # serà ignorada per cron, però serveix per deixar notes aclaridores sobre què fa cada tasca.

Cadenes especials @yearly, @daily i companyia

Per a casos freqüents, cron permet utilitzar paraules clau abreujades que substitueixen els cinc camps de temps. Faciliten força la lectura del fitxer:

  • @reiniciar: executa l'ordre una vegada cada cop que s'inicia el sistema.
  • @anualment o @anualment: equivalent a “0 0 1 1 *”, es llança un cop l'any.
  • @mensual: igual a “0 0 1 * *”, s'executa el primer dia de cada mes a mitjanit.
  • @setmanal: equivalent a “0 0 * * 0”, es llança un cop per setmana.
  • @diari y @midnight: tots dos són “0 0 * * *”, cada dia a les 00:00.
  • @hora: es correspon amb “0 * * * *”, el primer minut de cada hora.

Aquestes cadenes són molt còmodes, però convé recordar que no permeten triar una hora concreta diferent de la que porten per defecte . Si per exemple vols que alguna cosa s'executi cada dia a les 13:00, hauràs de fer servir la forma numèrica estàndard («0 13 * * *») en lloc de @daily.

Com crear i editar el vostre crontab d'usuari?

La manera correcta de gestionar les tasques d'un usuari és mitjançant l'ordre crontab -e . Això obre el crontab de l'usuari actual a l'editor per defecte (nano, vim, etc.) perquè puguis afegir o modificar línies.

La primera vegada que el facis servir, el sistema et sol preguntar quin editor vols fer servir . A partir d'aquí, cada cop que executeu crontab -e s'obrirà el mateix editor amb el contingut actual del fitxer, incloent comentaris d'ajuda generats per la distribució.

Un cop afegides les tasques i desat el fitxer, el dimoni cron recarrega automàticament la nova configuració , no cal reiniciar el servei. Per comprovar què tens programat, pots llistar el teu crontab amb:

crontab -l

Si en algun moment vols buidar per complet el teu crontab , pots fer-ho amb:

crontab -r

Hi ha també la variant crontab -r -i , que abans d'esborrar et demanarà confirmació, cosa molt recomanable per no portar-te al davant sense voler totes les tasques configurades.

Exemple pràctic: crear un script i programar-lo amb cron

Per veure tot això en acció, podem preparar un script d'exemple i fer que el cron l'executi automàticament. Imagina que crees un fitxer anomenat consulta.sh al teu directori personal amb una petita ordre:

nano consulta.sh

Al seu interior podries posar alguna cosa com:

#!/bin/bash
# script de ejemplo
sudo ls -l / > archivoResultado.txt

Aquest petit script llista el contingut del directori arrel i el bolca a un fitxer de text anomenat fitxerResultat.txt. Perquè cron ho executi sense problemes és imprescindible donar-li permisos d'execució:

chmod ugo+x consulta.sh

Ara toca afegir-lo al crontab. Executes:

crontab -e

I afegiu una línia, per exemple, perquè s'executi cada dia a les 19:00:

00 19 * * * usuario /ruta/completa/consulta.sh

En aquesta línia, els camps indiquen minut 0, hora 19, qualsevol dia del mes, qualsevol mes, qualsevol dia de la setmana . A continuació s'especifica l'usuari (en el cas de crontab de sistema) i després la ruta a l'script. Altres exemples típics serien:

  • Tots els diumenges a les 19:00:
    00 19 * * 0 usuario /ruta/consulta.sh
  • El 4 de febrer a les 19:00 cada any:
    00 19 4 2 * usuario /ruta/consulta.sh

Opcions de l'ordre crontab per administrar tasques

tasques automàtiques amb Crontab a Linux

El binari crontab no només serveix per editar tasques, sinó també per gestionar fitxers d'altres usuaris o carregar fitxers des de rutes concretes . Les opcions més utilitzades són:

  • crontab archivo: substitueix el crontab actual de l'usuari pel contingut del fitxer indicat.
  • crontab -e: obre el crontab de l'usuari actual a l'editor per defecte.
  • crontab -l: mostra a la pantalla totes les tasques actualment configurades per a aquest usuari.
  • crontab -r: esborra el crontab complet de l'usuari (sense confirmació, llevat que es faci servir -i).
  • crontab -c dir: permet definir el directori on s'emmagatzemaran els fitxers crontab, sempre que hi hagi permisos.
  • crontab -u usuario: administra el crontab d'un altre usuari (requereix permisos de root).

També se sol parlar de crontab -h per veure l'ajuda ràpida, on vénen detallades totes les banderes disponibles.

Entorn i variables en l'execució de cron

Una cosa que sovint fa maldecaps és que cron no executa les ordres en el mateix entorn que la teva sessió interactiva . És a dir, no carrega el teu .bashrc ni el teu .profile llevat que tu ho forcis. Per defecte defineix unes poques variables com:

  • INICI: el directori personal de l'usuari que executa el crontab.
  • LOGNAME y USUARI: el nom de l'usuari.
  • PETXA: l'intèrpret d'ordres que s'utilitza per interpretar les ordres, normalment /bin/sh.
  • CAMÍ: la ruta bàsica de cerca de binaris, sovint una mica limitat com /usr/bin:/bin.

Si confies que hi hagi ordres al PATH que després cron no troba, et toparàs amb errors silenciosos. Per això és molt recomanable fer servir rutes absolutes als teus scripts (per exemple, /usr/bin/python en lloc de python a seques), o bé redefinir PATH al propi crontab:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

També pots canviar l'intèrpret d'ordres usat i incloure la càrrega del teu .bashrc si ho necessites, ajustant l'inici del teu crontab així:

SHELL=/bin/bash
. $HOME/.bashrc

Pel que fa a la sortida, com són ordres de shell, pots redirigir STDOUT i STDERR igual que a la terminal . Per exemple, perquè una tasca no generi correu ni logs:

* * * * * comando > /dev/null 2>&1

O per acumular la sortida en un fitxer de log propi de la tasca, cosa molt útil per a depuració i auditoria:

*/10 * * * * /ruta/script.sh >> /var/log/mis_cron.log 2>&1

Control d'accés a cron: cron.allow i cron.deny

En molts sistemes es controla qui pot programar tasques mitjançant els fitxers /etc/cron.allow i /etc/cron.deny . Aquests fitxers serveixen per restringir o concedir accés a l'ordre crontab.

La lògica és senzilla: si hi ha cron.allow , només els usuaris que hi estan llistats poden utilitzar cron; si només existeix cron.deny , tots tret dels inclosos estan autoritzats. Si els dos són presents i un usuari apareix en tots dos, cron.allow té prioritat , per la qual cosa aquest usuari sí que podrà utilitzar crontab.

Per exemple, podries bloquejar tothom i després habilitar només un usuari particular amb alguna cosa com:

echo ALL | sudo tee -a /etc/cron.deny
echo ishmael | sudo tee -a /etc/cron.allow

Fins i tot amb permisos de sudo, si un usuari està vetat segons aquests fitxers, no podrà modificar ni el seu propi crontab ni el d'altres , i rebrà un missatge indicant que no pot fer servir el programa crontab.

Tipus de crontab: sistema i usuari

En un servidor típic conviuen dos nivells de configuració: d'una banda hi ha el crontab de sistema , i de l'altra els crontabs d'usuari personals. Tots dos usen sintaxi similar, però s'emmagatzemen i gestionen de manera diferent.

  • Crontab de sistema (UNIX/Linux): sol trobar-se a /etc/crontab i en arxius baix /etc/cron.d. Requereix privilegis de root per editar-se i se sol fer servir per a serveis crítics, tasques de manteniment global, rotació de logs, etc. Aquí les línies inclouen un camp extra amb l'usuari sota el qual s'executa la comanda.
  • Crontab d'usuari: cada compte en pot tenir un, accessible amb crontab -e. S'emmagatzemen en directoris com / Var / spool / cron o /var/spool/cron/crontabs segons la distro. No s'editen directament; es modifiquen usant l'ordre crontab, i s'executen amb els permisos de l'usuari que els va crear.

Gràcies a aquesta dualitat, cada usuari pot automatitzar les tasques habituals de manera aïllada , mentre l'administrador manté una programació global per al sistema.

Logs i sortida de les tasques de cron

Quan alguna cosa falla en una tasca programada, és fonamental saber on mirar. Depenent de la configuració del sistema, la sortida de cron pot anar a syslog, a un fitxer dedicat oa la cua de correu local.

Ollama Desktop
Article relacionat:
Ordres de Linux per obtenir informació del maquinari (comparativa amb Windows)

En moltes distribucions l'activitat del dimoni cron es bolca a fitxers com ara /var/log/cron o /var/log/syslog . Aquí veuràs quines ordres es llancen, en quin moment i si es produeixen errors bàsics. És un log una mica sorollós perquè barreja esdeveniments del sistema, però amb eines com grep pots filtrar fàcilment les entrades relacionades amb cron.

Quan s'instal·la un MTA (Mail Transfer Agent) com a postfix o sendmail, cron per defecte envia la sortida de cada tasca (stdout i stderr) a la bústia de correu local de lusuari que lha executada. Aquesta cua sol ser a /var/spool/mail/usuario. Pots llegir-la amb eines com mailx usant l'ordre mail.

Si voleu personalitzar el comportament, podeu definir la variable d'entorn MAILTO al principi del vostre crontab. Per exemple:

MAILTO="[email protected]"

Amb això, totes les sortides de les tasques d'aquest crontab s'enviaran a aquesta adreça, sempre que el servidor estigui configurat correctament per enviar correu extern. Si poses MAILTO buit (MAILTO=»»), cron descartarà tota la sortida i no generarà correus electrònics.

Impacte de cron en el rendiment del sistema

Encara que cron en si mateix consumeix molt pocs recursos, un mal ús pot provocar pics de CPU, saturació de disc o de xarxa . Al final, tot depèn de quants treballs programes i amb quina freqüència.

Si defineixes un munt de tasques pesades per a la mateixa hora, el sistema pot patir estrebades importants: consum alt de CPU i RAM, contenció de disc o ample de banda si hi ha transferències grans. A més, diverses tasques simultànies que accedeixin als mateixos fitxers o bases de dades poden generar conflictes i alentiments.

Quan hi ha feines que tiren de xarxa —per exemple, sincronització de backups remots , trucades a APIs o descàrregues massives—, també pots notar augments en el ping i latència general , sobretot en entorns amb bandes limitades.

Bones pràctiques per minimitzar l'impacte

Per aprofitar cron sense castigar la màquina, compensa seguir algunes estratègies molt senzilles :

  • Distribuir les tasques en diferents moments, sobretot les pesades, evitant hores punta per a usuaris o serveis.
  • Usar eines com agradable per baixar la prioritat de CPU d'algunes tasques llargues:
    0 3 * * * nice -n 19 /ruta/script.sh
  • Aprofitar utilitats com cpulimit si necessites limitar el percentatge de CPU que pot fer servir un procés llançat per cron.
  • Combinar cron amb ramat o altres mecanismes de bloqueig per evitar execucions simultànies del mateix script (molt útil en tasques de còpia de seguretat o manteniment).

També és molt interessant fer servir cron per millorar el rendiment del propi sistema : neteja periòdica de caixets i temporals, tancament d'aplicacions inactives, monitorització d'ús de CPU, RAM i disc en logs per detectar colls d'ampolla, etc.

Errors freqüents en programar amb cron i com evitar-los

Qui hagi treballat un temps amb cron sap que hi ha una sèrie d' errors típics que acaben repetint-se . Tenir-los controlats us estalvia moltes hores de prova i error.

Un dels més comuns té a veure amb el PATH limitat a l'entorn de cron . Comandes com git, python o php poden no trobar-se si no poses la ruta completa o si no ajustes PATH al principi del crontab. La solució és clara: rutes absolutes o redefinir PATH explícitament.

Una altra fallada clàssica és oblidar-se dels permisos d'execució de l'script . Si el fitxer no és executable o l'usuari de cron no té permisos, la tasca mai no es llançarà. Convé revisar amb ls -ly, si cal, fer servir chmod +x /ruta/script.sh.

També entra en joc el tema de privilegis . El Cron executa els treballs amb els permisos de l'usuari que els ha configurat; si necessites operacions que requereixin root, t'has de plantejar utilitzar sudo dins de l'script (amb totes les precaucions de seguretat pertinents) o traslladar la tasca al crontab de root.

Finalment, molts problemes es deuen a sobreprogramar (massa tasques freqüents), manca de logs útils o absència de notificacions. Establir un sistema mínim de registres i alertes —per exemple amb serveis externs com Healthchecks.io— ajuda a detectar que un cron ha deixat de funcionar abans que sigui tard.

Eines externes per treballar més còmode amb cron

No sempre ve de gust barallar-se amb la sintaxi de cron a mà. A Internet tens diverses eines que generen expressions cron, validen regles i ajuden a depurar errors sense haver d'instal·lar res a la teva màquina.

  • Crontab Guru: un editor en línia molt lleuger que et permet escriure una expressió cron i veure en text pla què significa (“every 15 minutes”, “at 03:00 on Sundays”, etc.). A més, ressalta errors de sintaxi i mostra exemples i trucs.
  • Cron Job Generator: orientat a crear tasques preconfigurades mitjançant formularis senzills. Permet seleccionar intervals típics, personalitzar-los i et torna la línia cron llesta per copiar.
  • EasyCron: servei en línia que no només genera expressions, sinó que executa tasques remotament trucant URLs segons la programació que defineixis. Inclou tauler de control, logs d'execucions i avisos per correu en cas de fallades.
  • KDE Cron (KCron): aplicació gràfica integrada en escriptoris KDE que ofereix una interfície visual per gestionar tasques cron sense tocar la línia d'ordres. Molt útil per a qui preferiu fer clic en comptes d'editar fitxers.
  • Cron Maker: generador web molt orientat a integracions amb biblioteques tipus Quartz. Permet muntar expressions complexes sense teclejar a mà, ideal per als que treballen amb sistemes basats en cron però des d'entorns de desenvolupament.

Aquestes utilitats són especialment pràctiques quan necessites programacions enrevessades o quan comences i vols confirmar que has entès bé l'expressió abans de posar-la en producció.

Alternatives a cron i ús en altres sistemes

Encara que cron és un estàndard de facto a Linux i Unix, hi ha alternatives que cobreixen casos en què cron es queda curt , a més de solucions equivalents en altres sistemes operatius.

A l'ecosistema Unix/Linux pots trobar-te amb eines com:

  • Anacron: pensada per a màquines que no estan enceses tot el dia. Si un treball diari no s'ha pogut executar perquè l'equip estava apagat, es llança quan es torna a encendre.
  • Fcron: similar a Anacron, permet combinar tasques per data i hora exacta sense exigir que l'equip estigui sempre actiu. Sol requerir instal·lació i compilació des de codi font en moltes distros.
  • hcron: introdueix conceptes com etiquetes per classificar tasques, gestionar xarxes o diferents grups d'usuaris amb més flexibilitat, afegint-hi un plus de seguretat i organització.
  • Mcron: compatible amb cron però amb la capacitat de redefinir horaris reconstruint feines des d'un punt inicial. També sol instal·lar-se a part i no ve de sèrie a la majoria de sistemes.

A Windows no hi ha cron com a tal, però hi ha programes que compleixen funcions molt semblants, alguns d'ells amb una interfície gràfica molt còmoda: WinCron, VisualCron o Advanced Task Scheduler són exemples de planificadors amb moltes opcions, adaptats a l'entorn de Microsoft.

En macOS, encara que cron segueix estant disponible, Apple recomana utilitzar launchd , el sistema d'administració de serveis. Amb launchd es defineixen tasques en fitxers .plist (Property List) amb moltes opcions de control: reinici automàtic de tasques fallides, condicions complexes d'execució, millor integració amb el sistema i programació precisa mitjançant StartCalendarInterval . Per a automatitzacions serioses a Mac, val la pena apostar per launchd en lloc de cron.

Cron en entorns empresarials i nivell de complexitat

En una empresa, cron és un aliat potent per reduir feina repetitiva i minimitzar errors humans . Permet automatitzar còpies de seguretat amb rsync , desplegaments programats, generació d'informes diaris o mensuals, sincronització entre servidors, tasques de manteniment, etc.

Encara que l'eina en si és senzilla, la complexitat real ve de la quantitat i tipus de tasques que vas acumulant . Un entorn amb desenes de scripts encadenats, alta freqüència d'execució i dependències entre processos pot ser difícil de mantenir sense bona documentació i sense monitorització adequada.

En aquests escenaris és crucial planificar la freqüència de les tasques perquè no devorin recursos , assegurar la seguretat dels fitxers de configuració (per evitar manipulacions malicioses) i comptar amb un sistema d'alertes que avisi en cas de fallades. En cas contrari, una cosa tan bàsica com un backup diari pot deixar d'executar-se durant setmanes sense que ningú se n'adoni.

Instal·lar apps de Linux a Windows 11 amb WSL2
Article relacionat:
Com instal·lar i configurar el Subsistema de Windows per a Linux 2 (WSL2)

En definitiva, cron i crontab segueixen sent una peça clau en qualsevol sistema Linux o Unix per automatitzar tasques de forma fiable, flexible i relativament senzilla . Entenent bé la sintaxi de temps, cuidant l'entorn d'execució (PATH, permisos, variables), controlant l'impacte en rendiment i recolzant-te en logs, eines gràfiques i serveis de monitorització, pots convertir un grapat de línies en una autèntica xarxa de tasques automàtiques que t'estalvien hores de feina i mantenen els sistemes en forma sense que. Comparteix la informació i altres usuaris sabran gestionar tasques automàtiques amb Crontab a Linux.


Afegir com a font preferida a Google