![]() |
Lucan publicar fa ja un temps, un excel·lent tutorial sobre cron i crontab que em sembla val la pena compartir. Cron és una mena d'equivalent a Tasques Programades a Windows, Només que es maneja des del terminal. Aquells que prefereixin una interfície visual per aconseguir el mateix objectiu, poden veure aquest un altre article. |
Què és cron?
El nom cron ve de el grec chronos que significa "temps". En el sistema operatiu Unix, cron és un administrador regular de processos en segon pla (dimoni) que executa processos o guions a intervals regulars (per exemple, cada minut, dia, setmana o mes). Els processos que s'han d'executar i l'hora en què han de fer s'especifiquen en el fitxer crontab.
Com funciona
El dimoni cron s'inicia d' /etc/rc.d/ o /etc/init.d depenent de la distribució. Cron s'executa en el background, revisa cada minut la taula de tasques crontab / Etc / crontab o en / Var / spool / cron en recerca de tasques que s'hagin de complir. Com a usuari podem afegir ordres o scripts amb tasques a cron per automatitzar alguns processos. Això és útil per exemple per automatitzar l'actualizacion d'un sistema o un bon sistema de respatllers.
Què és Crontab?
Crontab és un simple arxiu de text que guarda una llista d'ordres a executar en un temps especificat per l'usuari. Crontab verificarà la data i hora en què s'ha d'executar l'script o la comanda, els permisos d'execució i el realitzarà en el background. Cada usuari pot tenir el seu propi crontab, de fet el / Etc / crontab s'assumeix que és el crontab de l'usuari root, quan la majoria de gent (i fins i tot root) volen generar el seu propi arxiu de crontab, llavors utilitzarem el comandament crontab.
Crontab és la manera més senzilla d'administrar tasques amb cron en sistemes multiusuari, ja sigui com a simple usuari de sistema o usuari root.
utilitzant crontab
Anem començant amb un exemple simple.
Anem a automatitzar l'actualització d'un sistema, per eliminar la molesta de "sempre he de caminar actualitzant i això no m'agrada!".
Primer que res farem un script. Aquest script serà cridat per cron i contindrà totes les instruccions que volem que faci, per tant cal provar-ho en diversos casos i de diverses formes abans d'incloure-a cron, un senzill script d'actualització com aquest:
#! / Bin / bash #script exemple d'actualizacion #elija seva distribució # debian-ubuntu # apt-get update & apt-get -i upgrade #fedora #yum -i update #Arch #pacman --noconfirm -Syu
Treu-li el # a la línia de la teva distro. En cas que sigui Ubuntu / Debian, a la qual comença amb apt-get.
Guardem l'script com actualizacion.sh (ex. Directori scripts teu home). Canviem els permisos d'ejecucion de el maleït script amb:
chmod a + x ~ / scripts / actualizacion.sh
Executem l'script un parell de vegades per verificar que tot s'executi sense problemes, modifiquem el necessari (no ha de contenir errors, si no cron només repetirà un error una i altra vegada). Ara a afegir la tasca al nostre crontab.
Afegir tasques a crontab
Executem l'edició de l'crontab amb crontab -e, en algunes distros (com Ubuntu) ens dóna l'opció de triar l'editor de textos que desitgem, els altres ens vam quedar amb vaig veure. L'arxiu crontab lluirà alguna cosa asi.
# Mh dg mon dow user command
on:
- m correspon a el minut en què es va a executar el script, el valor va de 0 a 59
- h l'hora exacta, es maneja el format de 24 hores, els valors van de 0 a 23, sent 0 les 12:00 de la mitjanit.
- dg fa referència a el dia de el mes, per exemple es pot especificar 15 si es vol executar cada dia 15
- Dow significa el dia de la setmana, pot ser numèric (0 a 7, on 0 i 7 són diumenge) o les 3 primeres lletres del dia en anglès: mon, tue, wed, thu, fri, sat, sun.
- user defineix l'usuari que va a executar la comanda, pot ser root, o un altre usuari diferent sempre que tingui permisos d'execució de l'script.
- comanda refereix a la comanda o la ruta absoluta de l'script a executar, exemple: /home/usuari/scripts/actualitzar.sh, Si de cas crida a un script aquest ha de ser executable
Perquè quedés clar uns quants exemples de tasques de cron explicats:
Octubre 15 * * * usuari /home/usuario/scripts/actualizar.sh
Executarà el script actualizar.sh a les 10:15 am cada dia
Octubre 15 * * * usuari /home/usuario/scripts/actualizar.sh
Executarà el script actualizar.sh a les 10:15 am tots els dies
00 10 * * 0 root apt-get -i update Usuari root
Realitzarà una actualització tots els diumenges a les 10:00 am
45 10 * * sun root apt-get -i update
Usuari root realitzarà una actualització tots els diumenges (sun) a les 10:45
Juliol 30 novembre 7 * usuari /home/usuario/scripts/actualizar.sh
El dia 20 de novembre a les 7:30 l'usuari correrà l'script
Juliol 30 novembre 7 sun usuari /home/usuario/scripts/pastel_con_velitas.sh
El dia 11 de novembre a les 7:30 am i que sigui diumenge, l'usuari celebrarà el sysadmin (o sigui a mi)
01 * * * * usuari /home/usuario/scripts/molestorecordatorio.sh
Un molest recordatori cada minut de cada hora cada dia (NO recomanable).
Igual es poden gestionar rangs especials:
30 17 * * 1,2,3,4,5
A les 5:30 de la tarda tots els dies de dilluns a divendres.
00 12 1,15,28 * *
A les 12 del dia tots els dies primer, quinze i 28 de cada mes (ideal per a nòmines)
Si això resulta confús, crontab maneja cadenes especials per a definir aquests rangs.
@reboot Executa una vegada, a l'inici
@yearly executa només una vegada a l'any: 0 0 1 1 *
@annually igual que @yearly
@monthly executa un cop a el mes, el dia primer: 0 0 1 * *
@weekly Setmanal del primer minut de la primera hora de la setmana. 0 0 * * 0 ".
@daily diari, a les 12:00 a.m. 0 0 * * *
@mitjanit igual que @diari
@hourly a el primer minut de cada hora: 0 * * * *
El seu ús és molt senzill.
@hourly usuari /home/usuario/scripts/molestorecordatorio.sh @monthly usuari /home/usuario/scripts/respaldo.sh @daily root apt-get update && apt-get -i upgrade
Finalment i no menys important:
Administració de treballs en cron
crontab arxiu
Reemplaça l'existent crontab amb un arxiu definit per l'usuari
crontab -e
Edita el crontab de l'usuari, cada línia nova sera una nova tasca de crontab.
crontab -l
Llista totes les tasques de crontab de l'usuari
crontab -d
Esborra el crontab de l'usuari
crontab -c dir
Defineix el directoriod i crontab de l'usuari (aquest ha de tenir permisos d'escriptura i ejecucion de l'usuari)
crontab -u usuari
prefix per manejar el crontab d'un altre usuari, exemples:
$ Sudo crontab -l -o root $ sudo crontab -e usuari2 #crontab -d -o usuari
Aquesta eina, com moltes altres es poden veure a mes profunditat i amb més detall a:
Uf ... una mica embolicat.
falta el * / 30 (en el camp dels minuts) que executa cada 30 minuts ...
Just això comentaria jo fins que vaig decidir revisar els comentaris 😀
És una dada molt important i una cosa molt útil aquest modificador.
Hola!
En aquest moment estic provant una configuració cada 45 minuts.
* / 45 * * * *, i la instrucció s'executa als 45 minuts de cada hora I cada hora. És a dir:
S'executa a les 3:45, després a les 4:00, 4:45, després a les 5:00, 5:45, 6:00, 6:45, i així successivament.
Tinc alguna cosa malament ?, què puc fer perquè sigui només cada 45 minuts, o almenys una sola vegada a les i 45 de cada hora.
Hola!
En aquest moment estic provant una configuració cada 45 minuts.
* / 45 * * * *, i la instrucció s'executa als 45 minuts de cada hora I cada hora. És a dir:
S'executa a les 3:45, després a les 4:00, 4:45, després a les 5:00, 5:45, 6:00, 6:45, i així successivament.
Tinc alguna cosa malament ?, què puc fer perquè sigui només cada 45 minuts, o almenys una sola vegada a les i 45 de cada hora.
Hola super útil la informació parell aclarir com funciona cron.
Bytes
per *
Excel·lent, gràcies per aclarir-me com funciona cron .. anem a ficar una mica de mà 🙂
Aquesta línia segons entenc s'executés a les 10: 15:XNUMX corregeixin-me si m'equivoco
doncs ahi diu 10:15
Octubre 15 * * * usuari /home/usuario/scripts/actualizar.sh
Hola! molt bona info.
per executar un Script cada mitja hora la línia que caldria afegir a crontab seria: «30 * * * * root Scrip.sh» Correcte? Moltes Gràcies!
No. Si no recordo malament, per a això has de posar / 30 * * * * root Scrip.sh.
O sigui, afegir la / abans de l'30.
Salutacions! Pau.
Hola em gust el teu post, aquesta molt complet però volia preguntar-te alguna cosa.
Estic tenint problemes amb aquesta comanda i un de semblant «at».
Vull executar un script a una hora determinada i poso
at -f /home/mi_user/Escritorio/script.sh 18:08 exemple
i no s'executa l'script en pantalla o sigui a la terminal, s'executa en 2on pla?
I amb cron em passa el mateix, edito el crontab amb «crontab -e»
a la fin li agrego aquesta línia:
46 19 el meu_user /home/el meu_user/Escriptori/script.sh
i no fa res, no mostra l'script.
Algun suggeriment? Moltes gràcies i disculpa les molèsties
Perquè et aparegui el terminal, potser hagis de executar el terminal i passar com a paràmetre l'script.
Per exemple:
LXTerminal -i «mi_user /home/mi_user/Escritorio/script.sh»
El paràmetre a utilitzar pot variar sobre la base de l'emulador de terminal que utilitzis.
Espero que serveixi.
Abraçada! Pau.
S'agraeix l'aportació.
10 punts !!
salu2 !!
Moltes gràcies, em va servir molt per aclarir algunes coses, gràcies totals, per a més detalls o dubtes aniré a la PÀGINA MAN, salutacions reiterats.
tio moltes gràcies, he anat llegint i provant els exemples. moltes gràcies ... és molt comprensible. Salutacions
Jo va utilitzar Ubuntu Server 12.04.2 LTS, i la versio de crontab que tinc, per esborrar la llista de treballs de l'usuari s'utilitza, crontab -r (i -l, com diu aquest manual). Segur és per qüestió de versions.
D'altra banda, jo en alguna vegada s'executi només crontab i això com que em deixo crear el meu propi arxiu d'execució, però aquest no era el que s'estava executant. El que s'executa és el que està en / etc / crontab. potser a algú li serveixi el comentari.
PD (jo busqui amb locate i whereis crontab però només em retornava l'adreça abans esmentada i un altre arxiu que aquesta encriptat, llavors si el que s'executava era el de / etc / crontab, però a l'executar la comanda crontab -e em apareixia el meu amb tots els treballs que segons jo havia definit) on s'estava emmagatzemant aquesta imatge '???? salutacions. Sempre em logueo amb root.
Excel·lent, molt útil !!!
Hola, voldria fer això ............ «15 10 * * * root ifdown eth0»
és a dir que a certa hora s'apagui la targeta de xarxa ............ doncs bé, el vaig posar al crontab i no funcinó ...... .. què ona ??
Salutacions i gràcies
Et va faltar definir «mon» després de l'títol «Afegir tasques a l'crontab»
Igual està bonic l'article, cron és summament útil.
Que chevere em va servir molt bon post pregunta
Si vull fer seguiment als registres que deixa l'execució de tasques on el puc visualitzar?
és decdir vull veure l'historial de les accions fetes en el passat d'aquest arxiu i vull veure qui l'ha modificat i la data
gràcies
qualsevol verificar l'historial de modificacion d'aquest
com ho puc fer
gràcies
Bon dia,
Crec que en l'script d'ubuntu t'has equivocat, has posat ap-get -i upgrade en lloc d'apt-get -i upgrade. (T'has deixat una t).
Una salutació.
Així és. Gràcies!
Abraçada! Pau
Vull saber com crear un arxiu cron per poder especificar el temps cada quan s'executa, el directori, etc.
Gràcies per aclarir el funcionament i els comandaments bàsics per cron, ara a entretenir-se una rrato .-
Sempre que busco informació de qualsevol tema relacionat a GNU / Linux dono voltes i voltes per a al final sempre trobar en el 90% dels casos el millor tutorial en aquesta genial comunitat, crec que des d'ara començaré aquí i després per altres costats.
Salutacions
Gràcies Sander! Una abraçada! Pau.
dg = day of month
dow = day of week
és més fàcil si s'associa
Moltes gràcies molt complet això i ben explicat.
Això és el mateix que ens va donar el meu professor de Sistemes Operatius no li canvi res, ara veig per que és tan dolenta la classe .-., Bé això mateix dóna re de tasca xD
Benvolgut,
Consulta, es pot limitar el temps de durada d'una tasca?.
Per exemple tinc una tasca que es repeteix cada 5 minuts, en la repetició si encara està activa aquesta tasca, que la mati i torni a executar-se.
Gràcies,
Marcelo.-
Hola Marcel!
Crec que seria millor que plantegis aquesta consulta al nostre servei de preguntes i respostes anomenat ask DesdeLinux per tal que tota la comunitat pugui ajudar-te amb el teu problema.
Una abraçada, Pau.
bon post.
Quin és la comanda per terminal per afegir tasques a l'crontab (sense entrar a l'crontab i agregar manualment amb 'crontab -e' o reemplaçar el crontab per un altre crontab amb 'crontab arxiu').
La idea és crear un script extern per agregar les tasques a l'crontab
Gràcias
em sembla que podries fer servir «fet 'el que vulguis afegir' | cat >> 'ruta de l'cronotab (/ etc / cronotab)' «
com seria una expressió que s'executi cada 3 dies exactes
Hola.
Tinc un problema a l'executar una tasca de cron.
Jo va executar la següent tasca amb cronta -i:
01 * * * * root /home/user/script/mifichero.sh
però la tasca no es realitza. He comprabado que mifichero.sh tingui permís d'execució i que l'usuari que l'executi sigui root.
La mateixa tasca va executar a / etc / crontab i després del reinici de l'servei, tampoc em funciona.
El contingut d'mifichero.sh és una ordre que actualitza una BBDD i que si ho executo en consola si funciona.
alguna idea de quin pot ser el problema?
És probable que l'usuari de base de dades no tingui tots els permisos i primer hagis de exportar les variables d'entorn del teu motor de base de dades.
Per exemple en db2, aquesta línia aniria a l'començament de l'script
. / Home / db2inst1 / sqllib / db2profile
Una altra causa podria ser que l'script requereixi connexió a la base de dades, realitza la connexió a la base dins de l'script
no sàvia que havia de reiniciar el crond, portava una estona barallant-me amb això
sabran com indicar que la tasca es corri cada cap de mes, a l'hora que se li indiqui .. el detall és que no aconsegueixo com sàpiga que prengui l'últim dia de cada mes .. ??? vaig haver de anotar un per un però quan ve final de mes de febrer que és biciesto es em complica ..
bon dia !!
com detinc el proseso que s'està executant al crontab?
procés * ............
serб que vc podi em Ajudar? eu Tenho um script d'minha autoria que nгo funciona no crontab! jб dei totes es permissхes, no prуprio cron específic o usuбrio que podi executб-ho mes gens esdevé! Gostaria de saber es vc podi em Ajudar, pois outras coisas funcionam no cron! Vlws
com posaries una tasca perquè s'executa cada últim dia de mes (dies: 31-30-28)?
Com ja saben la comanda la seva s'usa per canviar d'usuari en la consola. Si jo faig servir la comanda el seu així: «el seu usuari» canvi d'usuari però sense les configuracions pròpies de «usuari», si jo executo el seu as: «la seva - usaurio» canvia d'usuari carregant les configuracions de l'usuari. Amb cron indico l'usuari, però com a càrrec les configuracions d'aquest usuari?
I si vull detenir-??
Hola,
no sé que estic fent malament, però segueixo els passos i no s'executa res. He provat:
59 * * * * / usr / bin / gedit
* * * * * / Usr / bin / gedit
* * * * * Root / usr / bin / gedit
* * * * * Usr / bin / prueva.sh
* * * * * Root usr / bin / prueva.sh
i res de res. No executa res. He reiniciat i tot.
moltes gràcies