Automatizació de tasques I
L’automatització de tasques en un sistema informàtic ens permet agilitzar l’execució de tasques repetitives que consumeixen gran part del nostre temps. Algunes de les tasques repetitives més usuals que trobem al món informàtic són la creació de còpies de seguretat, l’actualització de les aplicacions, el monitoratge del sistema, etc.
Als sistemes Linux l’automatització de tasques se sol fer des del mode ordre i s’utilitza la eina Cron.
Cron és una eina que permet executar tasques a intervals regulars de temps i és molt útil per automatitzar tasques relacionades amb el manteniment del sistema informàtic. Les tasques que es volen executar i el moment de l’execució s’especifiquen en un arxiu anomenat crontab. Cada usuari del sistema té el seu propi arxiu crontab per programar tasques, que s’emmagatzema al directori /var/spool/cron/crontabs. A més d’aquests arxius crontab dels usuaris hi ha un altre arxiu anomenat /etc/crontab que s’aplica a tot el sistema i que disposa d’un camp addicional per indiciar l’usuari que ha d’executar cada tasca. Aquest arxiu cal editar-lo manualment. Podeu observar un arxiu contrab d’un usuari i l’arxiu general /etc/crontab a la figura 1 i figura 2, respectivament.
infot@aula01:~$ sudo cat /var/spool/cron/crontabs/infot # DO NOT EDIT THIS FILE - edit the master and reinstall. # (/tmp/crontab.35KTun/crontab installed on Mon May 10 15:54:17 2021) # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any'). # # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command 55 15 * * * tar -zcf /mnt/backup/home.tar.gz /home/
Figura 1: Arxiu ‘crontab’ d’un usuari.
infot@aula01:~$ sudo cat /etc/crontab # /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do. SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 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 )
Els arxius crontab d’usuari estan formats per una sèrie de línies que s’anomenen expressions de Cron i tenen la següent sintaxi:
- minut hora dia_mes mes dia_setmana ordre
El significat de cada camp a una expressió de Cron és el següent:
- minut. Aquest camp permet indicar en quin minut volem executar la tasca. Pot ser un número enter comprès entre 0 i 59 i alguns caràcters especials.
- hora. Aquest camp indica a quina hora volem executar la tasca. Podem utilitzar un número enter entre 0 i 23 i caràcters especials.
- dia_mes. Aquest camp especifica quin dia del mes volem executar la tasca. Podem utilitzar un número enter entre 1 i 31 i els caràcters especials.
- mes. Aquest camp serveix per indicar el mes. Podem utilitzar un número enter entre 1 i 12 i caràcters especials.
- dia_setmana. Aquest camp serveix per especificar quin dia de la setmana s’executarà la tasca. Podem introduir un 1 pel dilluns, 2 pel dimarts fins al 7, que representa el diumenge, tot i que el diumenge també es pot representar amb el número 0. També podem introduir les tres primeres lletres del nom del dia en anglès (mon, tue, wed, thu, fri, sat i sun). En aquest camp també podem fer servir caràcters especials.
- ordre. En aquest camp especifiquem la tasca que volem executar.
Els caràcters especials que podem utilitzar a les expressions de Cron són:
- “*”. Aquest caràcter significa ‘tot’. Si posem l’asterisc al camp minut i al camp hora significa cada minut de cada hora.
- ,. Aquest caràcter serveix per crear una llista. Si volem executar un tasca al minut zero i al minut 45, podem posar 0,45 al camp minut i no crear dues tasques separades.
- -. Aquest caràcter representa un rang de valor. Si volem executar una tasca cada minut entre el minut 0 i el minut 30, podem posar al camp minut el valor 0-30.
- /. Aquest caràcter serveix per expressar un valor de període. Si volem executar una ordre cada 2 dies podem escriure /2 al camp dia.
Hi ha algunes expressions que es poden utilitzar a l’arxiu crontab per abreviar alguns caràcters especials que són:
- @hourly. Abrevia 0 * * * * (Cada hora)
- @daily. Abrevia 0 0 * * * (Cada dia)
- @weekly. Abrevia 0 0 * * 0 (Cada setmana)
- @monthly. Abrevia 0 0 1 * * (Cada mes)
- @yearly. Abrevia 0 0 1 1 * (Cada any)
Els usuaris no han d’editar els arxius crontab d’usuari de forma manual. Es recomana utilitzar l’ordre crontab, que permet editar l’arxiu del nostre perfil. Podem editar l’arxiu amb l’ordre crontab -e. La primera vegada que utilitzem aquesta ordre ens demanarà seleccionar un editor de text que ens servirà per editar l’arxiu de forma predeterminada.
Aquesta mateix ordre crontab admet altres opcions com:
- -l. Permet veure el contingut de l’arxiu crontab de l’usuari que ha iniciat sessió però no editar-lo.
- -r. Aquesta opció elimina l’arxiu crontab sense demanar confirmació.
- -i. Aquesta opció, utilitzada conjuntament amb -r, sol·licita confirmació per eliminar l’arxiu.
- -u. Si tenim privilegis d’administrador i utilitzem l’ordre sudo podrem editar el crontab de qualsevol usuari amb aquesta opció.
Podem administrar els permisos dels usuaris per utilitzar l’ordre crontab utilitzant els arxius /etc/cron.allow i /etc/cron.deny. Els usuaris inclosos a l’arxiu cron.deny no podran editar el seu crontab i només ho podran fer els usuaris inclosos a l’arxiu cron.allow. En cas que un mateix usuari estigui present als dos arxius, cron.deny i cron.allow, l’usuari si podrà editar el seu crontab.
Després de comprovar quines tasques cal executar a l’arxiu /etc/crontab, també es comproven tots els arxius emmagatzemats al directori /etc/cron.d. Cadascun d’aquests arxius especifica una tasca programada. Aquests arxius poden editar-se manualment i utilitzen les mateixes expressions de Cron que els arxius crontab. Només els usuaris amb privilegis d’administrador poden programar tasques en aquest directori.
Les eines Cron i Anacron, a més de l’execució de tasques emmagatzemades als arxius crontab i anacrontab, també podem executar tasques que es trobin emmagatzemades en arxius en uns directoris concrets. Aquests directoris són:
- /etc/cron.daily. Aquests guions administratius s’executaran una vegada al dia.
- /etc/cron.weekly. De la mateixa manera, els guions administratius emmagatzemats en aquest directori, s’executaran una vegada a la setmana.
- /etc/cron.monthly. En aquest directori s’emmagatzemen els guions administratius que s’executaran una vegada al mes.
- /etc/cron.hourly. Tots els guions administratius emmagatzemats en aquest directori s’executaran cada hora. Només Cron pot executar els guions ubicats en aquest directori.
Expressions de Cron
A continuació podeu observar alguns exemples d’expressions de Cron:
- “* * * * * ordre”. Executa l’ordre cada minut de cada hora de cada dia de cada mes.
- /15 * * * * ordre. Executa l’ordre cada 15 minuts de cada dia de cada mes.
- 0 2 * * 1 ordre. Executa l’ordre cada dilluns a les dues de la matinada.
- 15,35 * * 1 * ordre. Executa l’ordre als minuts 15 i 35 de cada hora tots els dies del primer més de l’any:
- 45 18 * * 5 ordre. Executa l’ordre cada divendres a les 18.45pm.
Webgrafia
- Gite, V. (2019). How To Add Jobs To cron Under Linux or UNIX. NixCraft. https://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/
Gite, V. (2017). Linux / UNIX Crontab File Location. NixCraft. https://www.cyberciti.biz/faq/where-is-the-crontab-file/
Sanchez-Colomer, M., & Lozano, A. (2021). Sistemes operatius monolloc. Institut Obert de Catalunya (IOC). https://ioc.xtec.cat/materials/FP/Recursos/fp_smx_m02_/web/fp_smx_m02_htmlindex/WebContent/u3/a3/continguts.html