Com programar tasques amb fcron i cron a Linux

Darrera actualització: 17/12/2025
Autor: Isaac
  • fcron estén les capacitats de cron permetent executar tasques pendents en equips que no estan encesos 24/7 i ofereix una sintaxi de planificació més flexible.
  • La configuració i seguretat de fcron i cron es basa en fitxers com /etc/fcron.conf, /etc/fcron.allow, /etc/fcron.deny, /etc/crontab i els directoris cron.*, juntament amb la integració amb syslog.
  • L'ús correcte de fcrontab i crontab, juntament amb una bona gestió de l'entorn (PATH, permisos, logs), és clau per automatitzar tasques de forma fiable i sense sorpreses.
  • Un disseny curós de les tasques programades, evitant solapaments i controlant el consum de recursos, permet aprofitar l'automatització sense degradar el rendiment del sistema.

Programar tasques amb fcron a Linux

Si et dediques a administrar sistemes Linux o tens un servidor casolà sempre encès, tard o d'hora et planteges com automatitzar tasques de manteniment, còpies de seguretat i scripts sense estar pendent del rellotge. És aquí on entra en joc fcron: un programador de tasques que va un pas més enllà de cron i s'adapta molt millor a equips que no estan encesos 24/7.

Al llarg d'aquest article veuràs, amb força detall, com programar tasques amb fcron, quina diferència aquest dimoni de cron i anacron, com s'integra amb syslog, quins fitxers de configuració intervenen, com utilitzar fcrontab per definir treballs i quins problemes típics et pots trobar en automatitzar processos a GNU/Linux. La idea és que acabis amb una visió molt completa, tant de fcron com de l'ecosistema cron clàssic, perquè puguis triar i configurar la solució que més et convingui.

Què és fcron i en què es diferencia de cron i anacron

fcron és un dimoni de planificació de tasques pensat per a sistemes que no necessàriament romanen encesos tot el temps. Ve a cobrir el buit entre cron (que assumeix que la màquina sempre està activa) i anacron (centrat en tasques diàries, setmanals, mensuals sense dependència de l'hora exacta).

Mentre que cron revisa cada minut si heu de llançar alguna cosa en funció de l'hora del sistema, com s'explica a programar tasques a Linux amb cron i at, fcron és capaç d'executar treballs “pendents” que no s?han pogut llançar perquè l?equip estava apagat. D'aquesta manera, si programes una tasca per a cada dia a les 03:00 i l'equip s'encén a les 09:00, fcron pot decidir córrer aquest job així que arrencada, segons la configuració que us hagis donat.

Una altra diferència important és que fcron permet expressions de planificació molt més flexibles, amb opcions com cada X temps d'uptime, límits de concurrència, prioritats, o condicions més riques que les que ofereix el cron clàssic. A més, s'integra amb syslog usant la facilitat cron, de manera que tot el seu registre dactivitat queda centralitzat en els logs del sistema.

Com altres programes d'aquest tipus, fcron es compon d'un dimoni principal (fcron) i d'una utilitat per gestionar les taules de tasques, anomenada fcrontab, que és l'equivalent directe a l'ordre crontab de tota la vida però amb sintaxi i opcions afegides.

Fitxers de configuració i control d'accés a fcron

En instal·lar fcron, apareixen diversos fitxers clau al sistema que convé conèixer. Els més importants són /etc/fcron.conf, /etc/fcron.allow y /etc/fcron.deny, que controlen el comportament general del dimoni i qui pot programar tasques.

l'arxiu /etc/fcron.conf defineix la configuració global del dimoni fcron: opcions d'entorn, rutes, comportament per defecte i paràmetres que afecten com es gestionen els treballs. Encara que a la majoria d'instal·lacions bàsiques no cal tocar aquest fitxer, és recomanable llegir la seva pàgina de manual (man fcron.conf) per conèixer totes les possibilitats, sobretot si esprémer les característiques avançades.

Per al control d'accés d'usuaris, fcron utilitza fitxers /etc/fcron.allow y /etc/fcron.deny, de forma molt similar a cron. A fcron.allow podeu llistar explícitament els usuaris als quals voleu permetre l'ús de fcrontab, mentre que a fcron.deny podeu indicar una “llista negra” d'usuaris als quals es bloqueja l'accés. Si hi ha fcron.allow, aquest té prioritat i s'ignora fcron.deny; si no n'hi ha cap, el comportament per defecte sol ser permetre l'ús de fcron a tots o només a root, segons la distribució.

A més d'aquests fitxers, el dimoni s'integra amb el sistema d'arrencada mitjançant un script d'inici, habitualment a /etc/rc.d/init.d/fcron o ubicacions equivalents segons la distro. Aquest script sol arribar al teu sistema a través de paquets com els blfs-bootscripts, que proporcionen els guions necessaris per activar serveis en arrencar.

Instal·lació i preparació del sistema per utilitzar fcron

Abans de posar-vos a programar tasques, necessiteu tenir el servei correctament instal·lat i ben integrat amb el registre de logs i el sistema d'usuaris. Aquí entra en joc la configuració de syslog, la creació d'un usuari dedicat i el propi procés de compilació/instal·lació de fcron si veniu des de codi font.

Per defecte, fcron utilitza la facilitat cron de syslog per escriure tots els vostres missatges. En sistemes on el fitxer /etc/syslog.conf no defineix cap entrada per a aquesta facilitat (cosa habitual en certs entorns com LFS o BLFS), cal afegir una línia perquè els missatges es guardin en un log separat. Una forma típica de fer-ho és apendir:

  Com agrupar pestanyes al Firefox pas a pas

cron.* -/var/log/cron.log

Amb això, tots els missatges etiquetats com a cron (inclosos els de fcron) s'emmagatzemaran a /var/log/cron.log. Després de modificar syslog.conf, és imprescindible recarregar el dimoni de logging (per exemple, sysklogd) perquè la nova configuració tingui efecte, usant una ordre tipus:

/etc/rc.d/init.d/sysklogd reload

Des del punt de vista de seguretat, és bona pràctica que fcron corri sota un usuari i grup sense privilegis. El més habitual és crear un compte de sistema específic, per exemple:

Crear usuari i grup de servei: groupadd fcron && useradd -c fcron -g fcron fcron

Un cop preparat l'entorn de logs i l'usuari de servei, pots compilar i instal·lar fcron des de les fonts si la teva distribució no ofereix un paquet precompilat adequat. Un flux força habitual consisteix a executar:

Compilar i instal·lar des de fonts: ./configure --without-sendmail --with-answer-all=no && make && make install

L'opció –without-sendmail indica que fcron no utilitzarà un MTA (Mail Transfer Agent) per enviar correus amb la sortida de les feines, encara que és perfectament capaç d'integrar-se amb un si el tens instal·lat. Si t'interessa rebre notificacions per correu, pots fer servir alguna cosa com --with-sendmail=/ruta/a/tu/MTA al configure, apuntant al binari real del teu servidor de correu.

el paràmetre –with-answer-all=no controla el comportament de la rutina de configuració que s'executa durant make install. Part d'aquest procés sol preguntar si vols instal·lar un script d'arrencada sota /etc/rc.d/init.d i crear automàticament els enllaços simbòlics als nivells d'execució 2, 3, 4 i 5, a més de parar qualsevol instància de fcron i aixecar-ne una de nova. Si és la teva primera instal·lació i prefereixes fer servir un script d'inici que segueixi la plantilla estàndard del teu sistema (per exemple, els scripts de BLFS), el normal és respondre “n” a aquestes preguntes, tal com suggereix la documentació.

si tens OpenJade i les DSSSL stylesheets instal·lades, pots afegir una opció addicional al configure, del tipus --with-dsssl-dir=/usr/share/sgml/docbook/dsssl-stylesheets-1.78, perquè es generi documentació a partir de les fonts a DocBook. No és obligatori per executar fcron, però pot ser útil si voleu tenir la documentació en formats addicionals.

Ús de fcrontab per programar tasques amb fcron

L'eina principal per definir i modificar les tasques de fcron és fcrontab. Funciona de manera similar al crontab tradicional, però amb extensions específiques i la sintaxi pròpia de fcron. Cada usuari pot tenir la seva pròpia taula de treballs, i també existeix un fcrontab de sistema que sol estar a /etc/fcrontab.

Quan modifiqueu el fitxer de tasques del sistema, és necessari recarregar-ho explícitament perquè fcron llegeixi els canvis. En el cas del fcrontab global, després d'editar /etc/fcrontab hauràs d'executar alguna cosa com:

Recarregar fcrontab: fcrontab /etc/fcrontab

Això carrega el contingut d'aquest fitxer a la taula interna que maneja el dimoni. La pàgina manual de fcrontab detalla totes les opcions, però el patró d'ús bàsic és semblant al de cron. Per al fcrontab propi d'un usuari (inclòs root) només cal llançar:

fcrontab -e

Igual que amb crontab, s'obrirà l'editor de text configurat per defecte (veure, nano, etc.) i podreu afegir o modificar les línies que defineixen els vostres treballs. Cada entrada descriu quan i com s'executarà una ordre o script, i fcron s'encarrega de córrer-lo encara que no hi hagi cap sessió de login activa. És a dir, la presència o absència d'usuaris interactius al sistema és irrellevant: els jobs de fcron s'executen igualment en segon pla.

A més de fcrontab, fcron proporciona la utilitat fcronsighup, la funció del qual és enviar un senyal al dimoni perquè torneu a llegir les taules de tasques sense necessitat de reiniciar el servei. És especialment útil després de modificacions freqüents de la configuració o si administres fcron en sistemes amb moltes tasques programades.

Programar tasques amb cron i crontab: fonaments i sintaxi

Tot i que fcron ofereix molts avantatges, segueix sent fonamental entendre com funciona el cron clàssic i el fitxer crontab, perquè bona part dels conceptes es comparteixen i moltes distribucions ho porten activat per defecte només instal·lar el sistema.

Cron és un dimoni que s'executa en segon pla des de l'arrencada del sistema operatiu. Cada minut comprova si als fitxers de planificació (com /etc/crontab o els crontabs d'usuari a /var/spool/cron/crontabs) hi ha alguna tasca el moment d'execució de la qual coincideixi amb l'hora actual del sistema. Per això la importància de tenir ben configurada l'hora i la zona horària.

Per verificar la configuració horària en sistemes actuals, és habitual fer servir timedatectl, que mostra hora local, hora universal, zona horària i si el rellotge està sincronitzat amb servidors NTP. Si detectes que la zona no és correcta, pots ajustar-la amb una ordre de l'estil:

  Easy methods to Repair Excessive CPU Utilització By WSAPPX in Home windows 10

Ajustar zona horària: timedatectl set-timezone Europe/Madrid

Pel que fa al format de crontab, cada línia que defineix una tasca segueix l'estructura clàssica de cinc camps de temps més l'ordre. Cada asterisc o valor indica una part concreta de la data:

  • minut: De 0 a 59.
  • Hora: De 0 a 23.
  • Dia del mes: De 1 a 31.
  • mes: De 1 a 12.
  • Dia de la setmana: de 0 a 6, on 0 (i de vegades 7) representa el diumenge.
  • comando: l'ordre o script que vols llençar.

Exemple diari: 00 19 * * * usuario /ruta/al/script/consulta.sh

Exemple diumenge: 00 19 * * 0 usuario /ruta/al/script/consulta.sh

Exemple anual: 00 19 4 2 * usuario /ruta/al/script/consulta.sh

La sintaxi admet també caràcters especials que permeten regles molt potents: l'asterisc per a “qualsevol valor”, la coma per a llistats, el guió per a rangs (per exemple 1-5, de dilluns a divendres), la barra per indicar periodicitats (*/10 per a “cada 10 unitats”) i combinacions tipus “rang/excepció” per excloure certs valors concrets.

Crontab del sistema i directoris cron.* a Linux

En moltes distribucions, especialment en entorns com Debian, cron s'organitza al voltant d'un crontab de sistema a /etc/crontab ia diversos directoris especials baix /etc/ on es poden deixar scripts perquè s'executin amb periodicitat diferent predefinida.

el fitxer / Etc / crontab sol incloure entrades que disparen la comanda run-parts apuntant a directoris com /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly y /etc/cron.monthly. La idea és que qualsevol script que hi col·loquis (i que compleixi certes condicions de permisos i nom) s'executarà automàticament amb la cadència indicada, sense que hagis d'escriure a mà totes les línies.

Exemple típic de /etc/crontab: 17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Aquestes línies fan que cada hora, cada dia, cada setmana i cada mes s'executin tots els scripts presents als directoris indicats, usant l'eina run-parts, que s'encarrega de trucar en cadena a tots els fitxers executables que compleixin un cert patró de nom.

Perquè cron executi aquests scripts sense posar pegues, cal complir diverses condicions: tenir permís d'execució, pertànyer a root, quin grup i altres no tinguin permís d'escriptura, i que el nom només contingui lletres, dígits, guió baix o guió normal. Si el nom porta altres caràcters, cron simplement ho ignorarà.

A més, existeix el directori /etc/cron.d, destinat a fer que les aplicacions de sistema hi deixin els seus propis fitxers crontab amb regles específiques que no encaixen en els quatre directoris anteriors. Debian recomana que l'administrador principal posi les regles globals a /etc/crontab i deixi /etc/cron.d per a paquets i serveis que s'instal·len després.

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

Igual que fcron, el cron clàssic permet restringir quins usuaris poden crear treballs programats mitjançant dos fitxers molt senzills: /etc/cron.allow y /etc/cron.deny. El primer actua com a llista blanca i el segon com a llista negra.

Si creeu /etc/cron.allow i afegiu un o més noms d'usuari, només aquests usuaris tindran dret a utilitzar crontab i definir les seves pròpies tasques, la resta quedarà automàticament bloquejats. Si prefereixes el contrari, és a dir, permetre a tots tret d'uns quants, pots mantenir /etc/cron.allow buit o inexistent i utilitzar /etc/cron.deny per llistar únicament els usuaris vetats.

Comportament per defecte: En alguns sistemes, si cap d'aquests fitxers no existeix, es permet a qualsevol usuari accedir a cron; en altres, però, només root té aquest privilegi per defecte. Convé revisar la documentació de la teva distribució per no emportar-te sorpreses.

Aquest mateix patró es replica amb fcron a través de /etc/fcron.allow y /etc/fcron.deny, de manera que pots unificar la teva política de seguretat per a tots dos dimonis i decidir amb precisió qui pot programar què.

Logs i depuració de tasques programades

Cron i fcron generen missatges que són vitals per diagnosticar problemes, comprovar execucions i detectar errors. En molts sistemes, els esdeveniments relacionats amb cron es bolquen a /var/log/syslog o en un fitxer específic com /var/log/cron.log, en funció de com estigui configurat syslog o rsyslog.

En el cas concret del cron de Debian, també és possible ajustar quin tipus d'esdeveniments es registren als logs mitjançant opcions extres a /etc/default/cron. Allà podeu afegir una línia de l'estil:

EXTRA_OPTS='-L 5'

El paràmetre L accepta un valor numèric que és la suma de diversos flags: 1 per registrar l'inici d'una tasca, 2 per al final, 4 per als treballs que acaben amb codi d'error diferent de zero i 8 per registrar el PID de cada procés llançat. Un valor de 5, per exemple, combina 1 i 4, de manera que només es registra el començament dels jobs i aquells que fallen, reduint el soroll als logs.

  How one can Reset SMC On MacBook, Mac Mini i iMac

Fcron, en utilitzar la facilitat cron dins de syslog, es beneficia de la mateixa configuració: una vegada que has definit a /etc/syslog.conf que cron.* s'adreça a un log concret, tot el que faci fcron també quedarà reflectit allà, la qual cosa és molt còmode quan estàs afinant una programació complicat.

Impacte en el rendiment i bones pràctiques en programar tasques

Automatitzar processos és una meravella, però un ús poc curós de cron o fcron pot tenir efectes molt negatius en el rendiment del sistema. És fàcil caure a la temptació de disparar scripts molt pesats amb massa freqüència, amb el resultat de pics de CPU, forts accessos a disc o saturació de la xarxa.

Exemple de càrrega: Quan concentres diverses tasques exigents a la mateixa franja horària, pots provocar que es llencin totes alhora i l'equip se'n ressenti. Per exemple, fer còpies de seguretat voluminoses, rotar logs de molts serveis i actualitzar grans bases de dades just a mitjanit pot ser una mala idea si el servidor també atén peticions crítiques en aquell moment.

Per mitigar aquests problemes, és recomanable escalonar les tasques i aprofitar hores de baixa càrrega, com la matinada. També pots introduir aleatorietat o condicionants als scripts, de manera que s'executin només si el sistema està prou folgat (sota ús de CPU, disc o xarxa).

Prioritat i límits: eines com nice o cpulimit són molt útils: pots llençar els teus scripts amb prioritat baixa o limitar el percentatge màxim de CPU que consumeixen. Així, encara que s'executin en moments crítics, tindran menys impacte sobre altres processos.

Evitar solapaments: En sistemes on un mateix job pugui solapar-se amb si mateix, convé fer servir utilitats com flock per impedir execucions concurrents. Un patró habitual és embolicar l'script en un bloqueig de fitxer: si el lock ja està pres, el nou intent de cron o fcron simplement surt sense fer res, evitant conflictes en accessos simultanis als mateixos recursos.

Errors típics en utilitzar cron i fcron i com evitar-los

En començar a programar tasques, és freqüent trobar-se amb situacions en què els scripts “no s'executen” o semblen fer-ho de manera erràtica. Moltes vegades, el problema no està en cron ni en fcron, sinó en detalls d'entorn, permisos o rutes.

Un dels errors més habituals és assumir que l'entorn d'execució de cron o fcron és el mateix que el de la sessió interactiva. En realitat, aquests dimonis llancen els ordres en un entorn molt minimalista, amb un PATH limitat. Si el teu script crida a binaris com a git, pitó o qualsevol programa instal·lat en rutes no estàndard, i no especifiques la ruta completa, és probable que falli.

Usar rutes absolutes: La solució passa per fer servir rutes absolutes dins dels scripts (per exemple, /usr/bin/python en comptes de python) o definir explícitament la variable PATH a l'inici del crontab o fcrontab, amb alguna mena:

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

Revisa permisos: Una altra font de problemes són els permisos dexecució. Si el fitxer no és executable o l'usuari sota el qual corre la tasca no té prou permisos sobre directoris i recursos implicats, el job fallarà silenciosament o només deixarà rastre en logs. Revisa amb ls -l i corregeix amb chmod +x quan sigui necessari, i pensa si el teu script realment necessita privilegis de root o n'hi ha prou amb un usuari normal.

És molt recomanable que, durant les proves, redirigeixis stdout i stderr a fitxers dins de les teves entrades de cron o fcron, de manera que puguis inspeccionar què ha passat. Una construcció com >/ruta/log.txt 2>&1 al final de la línia de crontab us pot estalviar hores de frustració.

Finalment, recorda que el comportament davant de canvis d'hora (horari d'estiu/hivern) no sempre és trivial. Cron intenta gestionar els salts de menys de tres hores de la millor manera possible, però si les vostres tasques depenen amb molta precisió de l'ordre i del temps transcorregut entre execucions, pot ser prudent evitar la franja conflictiva o dissenyar regles especials per a aquestes nits de canvi horari.

Dominar cron, fcron i les seves petites particularitats us permet construir una capa d'automatització molt potent sobre qualsevol sistema Linux, combinant la senzillesa de les expressions de temps amb tot el potencial dels scripts i eines de consola per mantenir, monitoritzar i optimitzar els teus servidors sense haver d'estar pendent d'ells a tota hora.

programar tasques en linux amb cron i at
Article relacionat:
Programar tasques a Linux amb cron i at: guia pràctica i completa