Cron & crontab, explicats

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.

Article relacionat:
Tutorial: Instal·lar paquets .tar.gz i .tar.bz2

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!".

com
Article relacionat:
Ordres per conèixer el sistema (identificar maquinari i algunes configuracions de programari)

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:

Gràcies Lucain!